get_short_sha1: make default disambiguation configurable
[gitweb.git] / t / t1302-repo-version.sh
index 0d9388afc4e20a5c536d214bfe25e630242ed667..ce4cff13bbced58add641a463321f36673121fd7 100755 (executable)
@@ -25,46 +25,86 @@ test_expect_success 'setup' '
 test_expect_success 'gitdir selection on normal repos' '
        echo 0 >expect &&
        git config core.repositoryformatversion >actual &&
-       (
-               cd test &&
-               git config core.repositoryformatversion >../actual2
-       ) &&
+       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
-       echo 99 >expect &&
-       (
-               cd test2 &&
-               git config core.repositoryformatversion >../actual
-       ) &&
-       test_cmp expect actual
+       test_expect_code 1 git -C test2 config core.repositoryformatversion >actual
 '
 
 test_expect_success 'gitdir not required mode' '
        git apply --stat test.patch &&
-       (
-               cd test &&
-               git apply --stat ../test.patch
-       ) &&
-       (
-               cd test2 &&
-               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 &&
-       (
-               cd test &&
-               git apply --check --index ../test.patch
-       ) &&
-       (
-               cd test2 &&
-               test_must_fail 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" "
+               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
+EOF
+
+test_expect_success 'precious-objects allowed' '
+       mkconfig 1 preciousObjects >.git/config &&
+       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