[PATCH 0/5] Fixing problem with deleting symrefs
I see that Rene Scharfe has also worked on the same issue, while I was preparing these patches...
On Mon, Oct 15, 2012 at 11:29 AM, Junio C Hamano <jch2355@gmail.com> wrote:
> Even though update-ref deferences a symref when it updates one to point at a > new object, I personally don't think update-ref -d that derefs makes any > sense. I'd rather see it error out when given a symref, with or without > --no-deref option.
I'm not sure. We have multiple testcases that directly test deleting a ref through a symref (e.g. t1400), so supporting this seems like a concious decision. Erroring out when given a symref will break the following testcases: - t1400 (git update-ref -d) - t3310 & t3311 (git notes merge --abort is broken) - t5505 (git remote set-head --delete and renaming a remote is broken)
Show 5 quoted lines
> But even if it did, removing a ref pointed by a symref should really remove > it, and forgetting to remove a leftover entry in packed-ref has no excuse > bug. > > I'd say what you observed is a double bug.
Patch #1 - #2 fixes the 2nd bug (removing through a symref should remove both loose and packed versions of the ref).
Patch #3 fixes an associated problem where deleting a symref would remove the dereferenced ref's reflog instead of the symref's reflog.
Patch #4 - #5 introduces solution A presented in my previous mail (i.e. 'git branch -d' never dereferences symrefs).
Johan Herland (5): t1400-update-ref: Add test verifying bug with symrefs in delete_ref() delete_ref(): Fix deletion of refs through symbolic refs delete_ref(): Remove the correct reflog when deleting symrefs Add tests for using symbolic refs as branch name aliases. branch -d: Fix failure to remove branch aliases (symrefs)
builtin/branch.c | 2 +- refs.c | 35 +++++++++++----------- t/t1400-update-ref.sh | 18 +++++++++++ t/t3220-symbolic-ref-as-branch-alias.sh | 53 +++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 18 deletions(-) create mode 100755 t/t3220-symbolic-ref-as-branch-alias.sh
-- 1.7.12.1.609.g5cd6968