From: René Scharfe Date: Sun, 21 Oct 2012 17:46:45 GMT Subject: Re: [PATCH 2/2] Fix failure to delete a packed ref through a symref Message-ID: <50843505.3040509@lsrfire.ath.cx> In-Reply-To: <1350816032-16312-3-git-send-email-johan@herland.net> Am 21.10.2012 12:40, schrieb Johan Herland: > 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 > --- > refs.c | 2 +- > t/t1400-update-ref.sh | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/refs.c b/refs.c > index 726c53c..6cec1c8 100644 > --- a/refs.c > +++ b/refs.c > @@ -1779,7 +1779,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); Looks reasonable. FWIW, this is independent of 547d058f in next (refs: lock symref that is to be deleted, not its target), which only affects behaviour when REF_NODEREF is set, while this one here only makes a difference with symrefs and REF_NODEREF unset. René