git-commit-vandalism/contrib/scalar/t/t9099-scalar.sh
Matthew John Cheetham 15d8adccab scalar: teach diagnose to gather loose objects information
When operating at the scale that Scalar wants to support, certain data
shapes are more likely to cause undesirable performance issues, such as
large numbers of loose objects.

By including statistics about this, `scalar diagnose` now makes it
easier to identify such scenarios.

Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-30 23:07:31 -07:00

124 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
test_description='test the `scalar` command'
TEST_DIRECTORY=$PWD/../../../t
export TEST_DIRECTORY
# Make it work with --no-bin-wrappers
PATH=$PWD/..:$PATH
. ../../../t/test-lib.sh
GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab ../cron.txt,launchctl:true,schtasks:true"
export GIT_TEST_MAINT_SCHEDULER
test_expect_success 'scalar shows a usage' '
test_expect_code 129 scalar -h
'
test_expect_success 'scalar unregister' '
git init vanish/src &&
scalar register vanish/src &&
git config --get --global --fixed-value \
maintenance.repo "$(pwd)/vanish/src" &&
scalar list >scalar.repos &&
grep -F "$(pwd)/vanish/src" scalar.repos &&
rm -rf vanish/src/.git &&
scalar unregister vanish &&
test_must_fail git config --get --global --fixed-value \
maintenance.repo "$(pwd)/vanish/src" &&
scalar list >scalar.repos &&
! grep -F "$(pwd)/vanish/src" scalar.repos
'
test_expect_success 'set up repository to clone' '
test_commit first &&
test_commit second &&
test_commit third &&
git switch -c parallel first &&
mkdir -p 1/2 &&
test_commit 1/2/3 &&
git config uploadPack.allowFilter true &&
git config uploadPack.allowAnySHA1InWant true
'
test_expect_success 'scalar clone' '
second=$(git rev-parse --verify second:second.t) &&
scalar clone "file://$(pwd)" cloned --single-branch &&
(
cd cloned/src &&
git config --get --global --fixed-value maintenance.repo \
"$(pwd)" &&
git for-each-ref --format="%(refname)" refs/remotes/origin/ >actual &&
echo "refs/remotes/origin/parallel" >expect &&
test_cmp expect actual &&
test_path_is_missing 1/2 &&
test_must_fail git rev-list --missing=print $second &&
git rev-list $second &&
git cat-file blob $second >actual &&
echo "second" >expect &&
test_cmp expect actual
)
'
test_expect_success 'scalar reconfigure' '
git init one/src &&
scalar register one &&
git -C one/src config core.preloadIndex false &&
scalar reconfigure one &&
test true = "$(git -C one/src config core.preloadIndex)" &&
git -C one/src config core.preloadIndex false &&
scalar reconfigure -a &&
test true = "$(git -C one/src config core.preloadIndex)"
'
test_expect_success 'scalar delete without enlistment shows a usage' '
test_expect_code 129 scalar delete
'
test_expect_success 'scalar delete with enlistment' '
scalar delete cloned &&
test_path_is_missing cloned
'
test_expect_success 'scalar supports -c/-C' '
test_when_finished "scalar delete sub" &&
git init sub &&
scalar -C sub -c status.aheadBehind=bogus register &&
test -z "$(git -C sub config --local status.aheadBehind)" &&
test true = "$(git -C sub config core.preloadIndex)"
'
test_expect_success '`scalar [...] <dir>` errors out when dir is missing' '
! scalar run config cloned 2>err &&
grep "cloned. does not exist" err
'
SQ="'"
test_expect_success UNZIP 'scalar diagnose' '
scalar clone "file://$(pwd)" cloned --single-branch &&
git repack &&
echo "$(pwd)/.git/objects/" >>cloned/src/.git/objects/info/alternates &&
test_commit -C cloned/src loose &&
scalar diagnose cloned >out 2>err &&
grep "Available space" out &&
sed -n "s/.*$SQ\\(.*\\.zip\\)$SQ.*/\\1/p" <err >zip_path &&
zip_path=$(cat zip_path) &&
test -n "$zip_path" &&
unzip -v "$zip_path" &&
folder=${zip_path%.zip} &&
test_path_is_missing "$folder" &&
unzip -p "$zip_path" diagnostics.log >out &&
test_file_not_empty out &&
unzip -p "$zip_path" packs-local.txt >out &&
grep "$(pwd)/.git/objects" out &&
unzip -p "$zip_path" objects-local.txt >out &&
grep "^Total: [1-9]" out
'
test_done