Re: [PATCH 2/2] Fix failure to delete a packed ref through a symref
- From
René Scharfe <rene.scharfe@lsrfire.ath.cx>
- Date
- Oct 21, 2012, 17:46 UTC
- 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:
Show 28 quoted lines
> 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 <johan@herland.net>
> ---
> 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é