From: Kyle Meyer Date: Fri, 17 Feb 2017 03:57:57 GMT Subject: [PATCH 0/3] delete_ref(): support reflog messages Message-ID: <20170217035800.13214-1-kyle@kyleam.com> In-Reply-To: <20170126211205.5gz3zsrptop7n34n@sigill.intra.peff.net> [Sorry for the slow response.] Jeff King writes: > On Mon, Jan 16, 2017 at 06:17:29PM -0500, Kyle Meyer wrote: [...] >> $ cat .git/logs/refs/heads/new-master >> 00000... 68730... Kyle Meyer 1484607020 -0500 commit (initial): Add file.txt >> 68730... 68730... Kyle Meyer 1484607020 -0500 Branch: renamed refs/heads/master to refs/heads/new-master >> >> $ cat .git/logs/HEAD >> 00000... 68730... Kyle Meyer 1484607020 -0500 commit (initial): Add file.txt >> 68730... 00000... Kyle Meyer 1484607020 -0500 >> >> I expected the second line of .git/logs/HEAD to mirror the second line >> of .git/logs/refs/heads/new-master. Are the empty message and null sha1 >> in HEAD's entry intentional? > > The null sha1 is correct, I think. The branch we were on went away, and > we use the null sha1 to indicate "no value" in both the creation and > deletion cases. I see, thanks. > I'd say there are two potential improvements: > > - delete_ref() should take a reflog message argument, in case it > updates the HEAD reflog (as a bonus, this will future-proof us for a > day when we might keep reflogs for deleted refs). I've tried to do this in the following patches. > - "git branch -m" does seem to realize when we are renaming HEAD, > because it updates HEAD to point to the new branch name. But it > should probably insert another reflog entry mentioning the rename > (we do for "git checkout foo", even when "foo" has the same sha1 as > the current HEAD). I haven't worked out how to do this part yet. I'm guessing the change will involve modifying split_head_update(). If this is added, should it be instead of, rather than in addition to, the deletion entry? If a "Branch: renamed ..." entry is present, it doesn't seem like the deletion entry is providing any additional information. delete_refs(): accept a reflog message argument update-ref: pass reflog message argument to delete_refs rename_ref: replace empty deletion message in HEAD's log builtin/am.c | 4 ++-- builtin/branch.c | 2 +- builtin/notes.c | 4 ++-- builtin/remote.c | 4 ++-- builtin/replace.c | 2 +- builtin/reset.c | 2 +- builtin/symbolic-ref.c | 2 +- builtin/tag.c | 2 +- builtin/update-ref.c | 2 +- fast-import.c | 2 +- refs.c | 4 ++-- refs.h | 2 +- refs/files-backend.c | 12 +++++++++--- t/t1400-update-ref.sh | 9 +++++++++ t/t3200-branch.sh | 4 ++++ transport.c | 2 +- 16 files changed, 39 insertions(+), 20 deletions(-) -- Kyle