Thread (5 messages) flat view 5 messages, 3 authors, 2016-06-15

Re: [PATCH 2/2] Fix failure to delete a packed ref through a symref

From: René Scharfe <hidden>
Date: 2016-06-15 22:55:05

Possibly related (same subject, not in this thread)

Am 21.10.2012 12:40, schrieb Johan Herland:
quoted hunk ↗ jump to hunk
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 <redacted>
---
  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é
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help