Re: [PATCH 2/2] Fix failure to delete a packed ref through a symref
Johan Herland writes: > 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 > --- Thanks. Will queue. > 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); > diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh > index f7ec203..e415ee0 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/2] Fix failure to delete a packed ref through a symref
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é -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/2] 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 --- 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); diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh index f7ec203..e415ee0 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 -- 1.7.12.1.609.g5cd6968 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html