mirror of
https://github.com/git/git
synced 2024-09-14 05:45:13 +00:00
![Patrick Steinhardt](/assets/img/avatar_default.png)
In t1302 we exercise logic around "core.repositoryFormatVersion" and extensions. These tests are not particularly robust against extensions like the newly introduced "refStorage" extension as we tend to clobber the repository's config file. We thus overwrite any extensions that were set, which may render the repository inaccessible in case it has to be accessed with a non-default ref storage. Refactor the tests to be more robust: - Check the DEFAULT_REPO_FORMAT prereq to determine the expected repository format version. This helps to ensure that we only need to update the prereq in a central place when new extensions are added. Furthermore, this allows us to stop seeding the now-unneeded object ID cache that was only used to figure out the repository version. - Use a separate repository to rewrite ".git/config" to test combinations of the repository format version and extensions. This ensures that we don't break the main test repository. While we could rewrite these tests to not overwrite preexisting extensions, it feels cleaner like this so that we can test extensions standalone without interference from the environment. - Do not rewrite ".git/config" when exercising the "preciousObjects" extension. Signed-off-by: Patrick Steinhardt <ps@pks.im> Reviewed-by: Christian Couder <christian.couder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
126 lines
2.6 KiB
Bash
Executable file
126 lines
2.6 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Nguyễn Thái Ngọc Duy
|
|
#
|
|
|
|
test_description='Test repository version check'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup' '
|
|
cat >test.patch <<-\EOF &&
|
|
diff --git a/test.txt b/test.txt
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/test.txt
|
|
@@ -0,0 +1 @@
|
|
+123
|
|
EOF
|
|
|
|
test_create_repo "test" &&
|
|
test_create_repo "test2" &&
|
|
git config --file=test2/.git/config core.repositoryformatversion 99
|
|
'
|
|
|
|
test_expect_success 'gitdir selection on normal repos' '
|
|
if test_have_prereq DEFAULT_REPO_FORMAT
|
|
then
|
|
echo 0
|
|
else
|
|
echo 1
|
|
fi >expect &&
|
|
git config core.repositoryformatversion >actual &&
|
|
git -C test config core.repositoryformatversion >actual2 &&
|
|
test_cmp expect actual &&
|
|
test_cmp expect actual2
|
|
'
|
|
|
|
test_expect_success 'gitdir selection on unsupported repo' '
|
|
# Make sure it would stop at test2, not trash
|
|
test_expect_code 1 git -C test2 config core.repositoryformatversion
|
|
'
|
|
|
|
test_expect_success 'gitdir not required mode' '
|
|
git apply --stat test.patch &&
|
|
git -C test apply --stat ../test.patch &&
|
|
git -C test2 apply --stat ../test.patch
|
|
'
|
|
|
|
test_expect_success 'gitdir required mode' '
|
|
git apply --check --index test.patch &&
|
|
git -C test apply --check --index ../test.patch &&
|
|
test_must_fail git -C test2 apply --check --index ../test.patch
|
|
'
|
|
|
|
check_allow () {
|
|
git rev-parse --git-dir >actual &&
|
|
echo .git >expect &&
|
|
test_cmp expect actual
|
|
}
|
|
|
|
check_abort () {
|
|
test_must_fail git rev-parse --git-dir
|
|
}
|
|
|
|
# avoid git-config, since it cannot be trusted to run
|
|
# in a repository with a broken version
|
|
mkconfig () {
|
|
echo '[core]' &&
|
|
echo "repositoryformatversion = $1" &&
|
|
shift &&
|
|
|
|
if test $# -gt 0; then
|
|
echo '[extensions]' &&
|
|
for i in "$@"; do
|
|
echo "$i"
|
|
done
|
|
fi
|
|
}
|
|
|
|
while read outcome version extensions; do
|
|
test_expect_success "$outcome version=$version $extensions" "
|
|
test_when_finished 'rm -rf extensions' &&
|
|
git init extensions &&
|
|
(
|
|
cd extensions &&
|
|
mkconfig $version $extensions >.git/config &&
|
|
check_${outcome}
|
|
)
|
|
"
|
|
done <<\EOF
|
|
allow 0
|
|
allow 1
|
|
allow 1 noop
|
|
abort 1 no-such-extension
|
|
allow 0 no-such-extension
|
|
allow 0 noop
|
|
abort 0 noop-v1
|
|
allow 1 noop-v1
|
|
EOF
|
|
|
|
test_expect_success 'precious-objects allowed' '
|
|
git config core.repositoryFormatVersion 1 &&
|
|
git config extensions.preciousObjects 1 &&
|
|
check_allow
|
|
'
|
|
|
|
test_expect_success 'precious-objects blocks destructive repack' '
|
|
test_must_fail git repack -ad
|
|
'
|
|
|
|
test_expect_success 'other repacks are OK' '
|
|
test_commit foo &&
|
|
git repack
|
|
'
|
|
|
|
test_expect_success 'precious-objects blocks prune' '
|
|
test_must_fail git prune
|
|
'
|
|
|
|
test_expect_success 'gc runs without complaint' '
|
|
git gc
|
|
'
|
|
|
|
test_done
|