2021-12-03 14:34:18 +01:00
|
|
|
#!/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
|
|
|
|
|
2021-12-03 14:34:23 +01:00
|
|
|
GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab ../cron.txt,launchctl:true,schtasks:true"
|
|
|
|
export GIT_TEST_MAINT_SCHEDULER
|
|
|
|
|
2021-12-03 14:34:18 +01:00
|
|
|
test_expect_success 'scalar shows a usage' '
|
|
|
|
test_expect_code 129 scalar -h
|
|
|
|
'
|
|
|
|
|
2021-12-03 14:34:21 +01:00
|
|
|
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
|
|
|
|
'
|
|
|
|
|
2021-12-03 14:34:23 +01:00
|
|
|
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) &&
|
2021-12-03 14:34:24 +01:00
|
|
|
scalar clone "file://$(pwd)" cloned --single-branch &&
|
2021-12-03 14:34:23 +01:00
|
|
|
(
|
|
|
|
cd cloned/src &&
|
|
|
|
|
|
|
|
git config --get --global --fixed-value maintenance.repo \
|
|
|
|
"$(pwd)" &&
|
|
|
|
|
2021-12-03 14:34:24 +01:00
|
|
|
git for-each-ref --format="%(refname)" refs/remotes/origin/ >actual &&
|
|
|
|
echo "refs/remotes/origin/parallel" >expect &&
|
|
|
|
test_cmp expect actual &&
|
|
|
|
|
2021-12-03 14:34:23 +01:00
|
|
|
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
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2021-12-03 14:34:26 +01:00
|
|
|
test_expect_success 'scalar reconfigure' '
|
|
|
|
git init one/src &&
|
|
|
|
scalar register one &&
|
|
|
|
git -C one/src config core.preloadIndex false &&
|
|
|
|
scalar reconfigure one &&
|
2021-12-03 14:34:27 +01:00
|
|
|
test true = "$(git -C one/src config core.preloadIndex)" &&
|
|
|
|
git -C one/src config core.preloadIndex false &&
|
|
|
|
scalar reconfigure -a &&
|
2021-12-03 14:34:26 +01:00
|
|
|
test true = "$(git -C one/src config core.preloadIndex)"
|
|
|
|
'
|
|
|
|
|
2021-12-03 14:34:28 +01:00
|
|
|
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
|
|
|
|
'
|
|
|
|
|
2022-01-28 15:31:57 +01:00
|
|
|
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)"
|
|
|
|
'
|
|
|
|
|
2022-05-29 01:11:14 +02:00
|
|
|
test_expect_success '`scalar [...] <dir>` errors out when dir is missing' '
|
|
|
|
! scalar run config cloned 2>err &&
|
|
|
|
grep "cloned. does not exist" err
|
|
|
|
'
|
|
|
|
|
scalar: implement `scalar diagnose`
Over the course of Scalar's development, it became obvious that there is
a need for a command that can gather all kinds of useful information
that can help identify the most typical problems with large
worktrees/repositories.
The `diagnose` command is the culmination of this hard-won knowledge: it
gathers the installed hooks, the config, a couple statistics describing
the data shape, among other pieces of information, and then wraps
everything up in a tidy, neat `.zip` archive.
Note: originally, Scalar was implemented in C# using the .NET API, where
we had the luxury of a comprehensive standard library that includes
basic functionality such as writing a `.zip` file. In the C version, we
lack such a commodity. Rather than introducing a dependency on, say,
libzip, we slightly abuse Git's `archive` machinery: we write out a
`.zip` of the empty try, augmented by a couple files that are added via
the `--add-file*` options. We are careful trying not to modify the
current repository in any way lest the very circumstances that required
`scalar diagnose` to be run are changed by the `diagnose` run itself.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-29 01:11:15 +02:00
|
|
|
SQ="'"
|
|
|
|
test_expect_success UNZIP 'scalar diagnose' '
|
|
|
|
scalar clone "file://$(pwd)" cloned --single-branch &&
|
2022-05-29 01:11:17 +02:00
|
|
|
git repack &&
|
|
|
|
echo "$(pwd)/.git/objects/" >>cloned/src/.git/objects/info/alternates &&
|
2022-05-29 01:11:18 +02:00
|
|
|
test_commit -C cloned/src loose &&
|
scalar: implement `scalar diagnose`
Over the course of Scalar's development, it became obvious that there is
a need for a command that can gather all kinds of useful information
that can help identify the most typical problems with large
worktrees/repositories.
The `diagnose` command is the culmination of this hard-won knowledge: it
gathers the installed hooks, the config, a couple statistics describing
the data shape, among other pieces of information, and then wraps
everything up in a tidy, neat `.zip` archive.
Note: originally, Scalar was implemented in C# using the .NET API, where
we had the luxury of a comprehensive standard library that includes
basic functionality such as writing a `.zip` file. In the C version, we
lack such a commodity. Rather than introducing a dependency on, say,
libzip, we slightly abuse Git's `archive` machinery: we write out a
`.zip` of the empty try, augmented by a couple files that are added via
the `--add-file*` options. We are careful trying not to modify the
current repository in any way lest the very circumstances that required
`scalar diagnose` to be run are changed by the `diagnose` run itself.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-29 01:11:15 +02:00
|
|
|
scalar diagnose cloned >out 2>err &&
|
2022-05-29 01:11:16 +02:00
|
|
|
grep "Available space" out &&
|
scalar: implement `scalar diagnose`
Over the course of Scalar's development, it became obvious that there is
a need for a command that can gather all kinds of useful information
that can help identify the most typical problems with large
worktrees/repositories.
The `diagnose` command is the culmination of this hard-won knowledge: it
gathers the installed hooks, the config, a couple statistics describing
the data shape, among other pieces of information, and then wraps
everything up in a tidy, neat `.zip` archive.
Note: originally, Scalar was implemented in C# using the .NET API, where
we had the luxury of a comprehensive standard library that includes
basic functionality such as writing a `.zip` file. In the C version, we
lack such a commodity. Rather than introducing a dependency on, say,
libzip, we slightly abuse Git's `archive` machinery: we write out a
`.zip` of the empty try, augmented by a couple files that are added via
the `--add-file*` options. We are careful trying not to modify the
current repository in any way lest the very circumstances that required
`scalar diagnose` to be run are changed by the `diagnose` run itself.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-29 01:11:15 +02:00
|
|
|
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 &&
|
2022-05-29 01:11:17 +02:00
|
|
|
test_file_not_empty out &&
|
|
|
|
unzip -p "$zip_path" packs-local.txt >out &&
|
2022-05-29 01:11:18 +02:00
|
|
|
grep "$(pwd)/.git/objects" out &&
|
|
|
|
unzip -p "$zip_path" objects-local.txt >out &&
|
|
|
|
grep "^Total: [1-9]" out
|
scalar: implement `scalar diagnose`
Over the course of Scalar's development, it became obvious that there is
a need for a command that can gather all kinds of useful information
that can help identify the most typical problems with large
worktrees/repositories.
The `diagnose` command is the culmination of this hard-won knowledge: it
gathers the installed hooks, the config, a couple statistics describing
the data shape, among other pieces of information, and then wraps
everything up in a tidy, neat `.zip` archive.
Note: originally, Scalar was implemented in C# using the .NET API, where
we had the luxury of a comprehensive standard library that includes
basic functionality such as writing a `.zip` file. In the C version, we
lack such a commodity. Rather than introducing a dependency on, say,
libzip, we slightly abuse Git's `archive` machinery: we write out a
`.zip` of the empty try, augmented by a couple files that are added via
the `--add-file*` options. We are careful trying not to modify the
current repository in any way lest the very circumstances that required
`scalar diagnose` to be run are changed by the `diagnose` run itself.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-29 01:11:15 +02:00
|
|
|
'
|
|
|
|
|
2021-12-03 14:34:18 +01:00
|
|
|
test_done
|