]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mktag tests: test update-ref and reachable fsck
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 17 Jun 2021 10:42:00 +0000 (12:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 28 Jun 2021 16:30:41 +0000 (09:30 -0700)
Extend the mktag tests to pass the created bad tag through update-ref
and fsck.

The reason for passing it through update-ref is to guard against it
having a segfault as for-each-ref did before c6854508808 (ref-filter:
fix NULL check for parse object failure, 2021-04-01).

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

index 78c6f64e3651261298c1bc7cf0a6898797b2a17b..67f6ecbe88126c5c363397e0a58e0e362d521e83 100755 (executable)
@@ -44,11 +44,13 @@ check_verify_failure () {
        '
 
        test_expect_success "setup: $subject" '
+               tag_ref=refs/tags/bad_tag &&
+
                # Reset any leftover state from the last $subject
                rm -rf bad-tag &&
 
                git init --bare bad-tag &&
-               git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig
+               bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
        '
 
        test_expect_success "hash-object & fsck unreachable: $subject" '
@@ -59,6 +61,23 @@ check_verify_failure () {
                        test_must_fail git -C bad-tag fsck
                fi
        '
+
+       test_expect_success "update-ref & fsck reachable: $subject" '
+               # Make sure the earlier test created it for us
+               git rev-parse "$bad_tag" &&
+
+               # The update-ref of the bad content will fail, do it
+               # anyway to see if it segfaults
+               test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&
+
+               # Manually create the broken, we cannot do it with
+               # update-ref
+               echo "$bad_tag" >"bad-tag/$tag_ref" &&
+
+               # Unlike fsck-ing unreachable content above, this
+               # will always fail.
+               test_must_fail git -C bad-tag fsck
+       '
 }
 
 test_expect_mktag_success() {