From: Johan Herland Date: Sun, 21 Oct 2012 10:40:32 +0000 (+0200) Subject: Fix failure to delete a packed ref through a symref X-Git-Tag: v1.8.1-rc0~32^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b274a7146c44624bc30bbd54124312d4d3e6a28d;p=thirdparty%2Fgit.git Fix failure to delete a packed ref through a symref When deleting a ref through a symref (e.g. using 'git update-ref -d HEAD' to delete refs/heads/master), we would remove the loose ref, but a packed version of the same ref would remain, the end result being that instead of deleting refs/heads/master we would appear to reset it to its state as of the last repack. This patch fixes the issue, by making sure we pass the correct ref name when invoking repack_without_ref() from within delete_ref(). Signed-off-by: Johan Herland Signed-off-by: Junio C Hamano --- diff --git a/refs.c b/refs.c index da74a2b29a..b4c57af998 100644 --- a/refs.c +++ b/refs.c @@ -1778,7 +1778,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); diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh index f7ec203cfb..e415ee0bbf 100755 --- a/t/t1400-update-ref.sh +++ b/t/t1400-update-ref.sh @@ -85,7 +85,7 @@ test_expect_success \ "move $m (by HEAD)" \ "git update-ref HEAD $B $A && test $B"' = $(cat .git/'"$m"')' -test_expect_failure "delete $m (by HEAD) should remove both packed and loose $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