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
|