]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jh/update-ref-d-through-symref' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 27 Nov 2012 21:28:45 +0000 (13:28 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 Nov 2012 21:28:45 +0000 (13:28 -0800)
* jh/update-ref-d-through-symref:
  Fix failure to delete a packed ref through a symref
  t1400-update-ref: Add test verifying bug with symrefs in delete_ref()

refs.c
t/t1400-update-ref.sh

diff --git a/refs.c b/refs.c
index 9d1685bcba4ca0381dd9d0990a97046b56324aed..520e50f3bc9c52beb45d2df19a7ae928c174c9ed 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1770,7 +1770,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
         * packed one.  Also, if it was not loose we need to repack
         * without it.
         */
-       ret |= repack_without_ref(refname);
+       ret |= repack_without_ref(lock->ref_name);
 
        unlink_or_warn(git_path("logs/%s", lock->ref_name));
        invalidate_ref_cache(NULL);
index 4fd83a667ac8b08bef090d303bc4434969874780..e415ee0bbf1dcf45f3ee771d0fefedb1c8fa4246 100755 (executable)
@@ -74,6 +74,24 @@ test_expect_success "delete $m (by HEAD)" '
 '
 rm -f .git/$m
 
+test_expect_success \
+       "create $m (by HEAD)" \
+       "git update-ref HEAD $A &&
+        test $A"' = $(cat .git/'"$m"')'
+test_expect_success \
+       "pack refs" \
+       "git pack-refs --all"
+test_expect_success \
+       "move $m (by HEAD)" \
+       "git update-ref HEAD $B $A &&
+        test $B"' = $(cat .git/'"$m"')'
+test_expect_success "delete $m (by HEAD) should remove both packed and loose $m" '
+       git update-ref -d HEAD $B &&
+       ! grep "$m" .git/packed-refs &&
+       ! test -f .git/$m
+'
+rm -f .git/$m
+
 cp -f .git/HEAD .git/HEAD.orig
 test_expect_success "delete symref without dereference" '
        git update-ref --no-deref -d HEAD &&