]> git.ipfire.org Git - thirdparty/git.git/commitdiff
cat-file tests: test for current --allow-unknown-type behavior
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 1 Oct 2021 09:16:44 +0000 (11:16 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Oct 2021 22:06:00 +0000 (15:06 -0700)
Add more tests for the current --allow-unknown-type behavior. As noted
in [1] I don't think much of this makes sense, but let's test for it
as-is so we can see if the behavior changes in the future.

1. https://lore.kernel.org/git/87r1i4qf4h.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1006-cat-file.sh

index 2e83c8cacfba092f1e47a7cc072417f41a239813..c89483f40bf18350eef2c094f1ff0d7c55df167a 100755 (executable)
@@ -402,6 +402,67 @@ do
        done
 done
 
+test_expect_success '-e is OK with a broken object without --allow-unknown-type' '
+       git cat-file -e $bogus_short_sha1
+'
+
+test_expect_success '-e can not be combined with --allow-unknown-type' '
+       test_expect_code 128 git cat-file -e --allow-unknown-type $bogus_short_sha1
+'
+
+test_expect_success '-p cannot print a broken object even with --allow-unknown-type' '
+       test_must_fail git cat-file -p $bogus_short_sha1 &&
+       test_expect_code 128 git cat-file -p --allow-unknown-type $bogus_short_sha1
+'
+
+test_expect_success '<type> <hash> does not work with objects of broken types' '
+       cat >err.expect <<-\EOF &&
+       fatal: invalid object type "bogus"
+       EOF
+       test_must_fail git cat-file $bogus_short_type $bogus_short_sha1 2>err.actual &&
+       test_cmp err.expect err.actual
+'
+
+test_expect_success 'broken types combined with --batch and --batch-check' '
+       echo $bogus_short_sha1 >bogus-oid &&
+
+       cat >err.expect <<-\EOF &&
+       fatal: invalid object type
+       EOF
+
+       test_must_fail git cat-file --batch <bogus-oid 2>err.actual &&
+       test_cmp err.expect err.actual &&
+
+       test_must_fail git cat-file --batch-check <bogus-oid 2>err.actual &&
+       test_cmp err.expect err.actual
+'
+
+test_expect_success 'the --batch and --batch-check options do not combine with --allow-unknown-type' '
+       test_expect_code 128 git cat-file --batch --allow-unknown-type <bogus-oid &&
+       test_expect_code 128 git cat-file --batch-check --allow-unknown-type <bogus-oid
+'
+
+test_expect_success 'the --allow-unknown-type option does not consider replacement refs' '
+       cat >expect <<-EOF &&
+       $bogus_short_type
+       EOF
+       git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&
+       test_cmp expect actual &&
+
+       # Create it manually, as "git replace" will die on bogus
+       # types.
+       head=$(git rev-parse --verify HEAD) &&
+       test_when_finished "rm -rf .git/refs/replace" &&
+       mkdir -p .git/refs/replace &&
+       echo $head >.git/refs/replace/$bogus_short_sha1 &&
+
+       cat >expect <<-EOF &&
+       commit
+       EOF
+       git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success "Type of broken object is correct" '
        echo $bogus_short_type >expect &&
        git cat-file -t --allow-unknown-type $bogus_short_sha1 >actual &&