git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/5] Fixing problem with deleting symrefs

From
Johan Herland <johan@herland.net>
Date
Oct 16, 2012, 13:44 UTC
Message-ID
<1350395094-11404-1-git-send-email-johan@herland.net>
In-Reply-To
<CAPc5daUws-MfzC9imkytTrLaHyyywE4_OX1jAUVPCTK2WyUF=w@mail.gmail.com>

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

Next: Johan Herland
Message 1 of 7 in “Fixing problem with deleting symrefs”
  1. 0/5 Fixing problem with deleting symrefsJohan Herland, Oct 16, 2012
  2. 1/5 t1400-update-ref: Add test verifying bug with symrefs in delete_ref()Johan Herland, Oct 16, 2012
  3. 2/5 delete_ref(): Fix deletion of refs through symbolic refsJohan Herland, Oct 16, 2012
  4. 3/5 delete_ref(): Remove the correct reflog when deleting symrefsJohan Herland, Oct 16, 2012
  5. 4/5 Add tests for using symbolic refs as branch name aliases.Johan Herland, Oct 16, 2012
  6. 5/5 branch -d: Fix failure to remove branch aliases (symrefs)Johan Herland, Oct 16, 2012
  7. Junio C HamanoOct 16, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.