OSDN Git Service

t3210: test for spurious error messages for dangling packed refs
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 22 Apr 2013 19:52:24 +0000 (21:52 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 1 May 2013 22:33:10 +0000 (15:33 -0700)
A packed reference can be overridden by a loose reference, in which
case the packed reference is obsolete and is never used.  The object
pointed to by such a reference can be garbage collected.  Since
d66da478f2, this could lead to the emission of a spurious error
message:

    error: refs/heads/master does not point to a valid object!

The error is generated by repack_without_ref() if there is an obsolete
dangling packed reference in packed-refs when the packed-refs file has
to be rewritten due to the deletion of another packed reference.  Add
a failing test demonstrating this problem and some passing tests of
related scenarios.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3210-pack-refs.sh

index cd04361..675f06a 100755 (executable)
@@ -118,4 +118,37 @@ test_expect_success 'pack, prune and repack' '
        test_cmp all-of-them again
 '
 
+test_expect_success 'explicit pack-refs with dangling packed reference' '
+       git commit --allow-empty -m "soon to be garbage-collected" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git pack-refs --all 2>result &&
+       test_cmp /dev/null result
+'
+
+test_expect_success 'delete ref with dangling packed version' '
+       git checkout -b lamb &&
+       git commit --allow-empty -m "future garbage" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git checkout master &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git branch -d lamb 2>result &&
+       test_cmp /dev/null result
+'
+
+test_expect_failure 'delete ref while another dangling packed ref' '
+       git branch lamb &&
+       git commit --allow-empty -m "future garbage" &&
+       git pack-refs --all &&
+       git reset --hard HEAD^ &&
+       git reflog expire --expire=all --all &&
+       git prune --expire=all &&
+       git branch -d lamb 2>result &&
+       test_cmp /dev/null result
+'
+
 test_done