Re: [PATCH] logging branch deletion to help recovering from mistakes
From: Shawn Pearce <hidden>
Date: 2016-06-15 22:50:12
On Tue, Dec 7, 2010 at 9:06 AM, Jeff King [off-list ref] wrote:
On Mon, Dec 06, 2010 at 10:28:53PM -0800, Junio C Hamano wrote:quoted
quoted
Should this special log be mentioned in git-update-ref.txt or gitrepository-layout.txt?Perhaps, but I wasn't sure if this patch itself is a good idea to begin with. Not the problem it tries to solve, but its approach. For example, this cannot be shown with "reflog show" or "log -g" due to the way these frontends locate the reflog file to read (the logic wants to have an underlying ref).Yeah, I think this is not _quite_ what people want in this area. A base requirement from past discussions, I think, is that the whole reflog of the deleted branch be saved rather than just the tip. And then "reflog show" would make a lot more sense on such saved reflogs.
Yup, that's what I recall too, folks (including myself) want to save the reflog of the deleted branch, so it can be recovered if the branch itself were to be recovered with an --undelete option.
I'm not sure in practice how important that distinction is, as we are not saving deleted branch reflogs _at all_ right now, so the requirements are mostly speculation at this point. The most recent discussion I recall is this one: http://thread.gmane.org/gmane.comp.version-control.git/144250/focus=145353 where the general idea was to just keep deleted reflogs around, append to them if the branch was recreated, and use a consistent renaming scheme to avoid D/F naming conflicts (e.g., "foo" is a deleted ref, and you create "foo/bar").
Per check-ref-format, ref names cannot contain two dots. We could archive ref logs by renaming them, $GIT_DIR/logs/refs/heads/foo becomes $GIT_DIR/logs/refs/heads/foo..deleted-1. If foo is created and deleted again, it becomes foo..deleted-2. This still causes problems for git reflog show / git log -g because they want a current ref to enumerate the log of. A different approach might be to have $GIT_DIR/logs/refs/REF_ATTIC, and special case that in git reflog show / git log -g. When a ref is deleted, append its entire log onto REF_ATTIC, between two specially formatted marker lines. When recovering a branch, copy out the region from the REF_ATTIC log. -- Shawn.