Skip to content

Gets rid of "if reflog exists, append to it regardless of config settings"

Han-Wen Nienhuys via GitGitGadget git 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest7 patches 6 repliesIn review
  2. v25 patches 6 repliesSuperseded
  3. v14 patches 9 repliesSuperseded

Changes in v3 from the cover letter

* fix show-branch
* add some more context to commit messages
* change calling convention for log_ref_setup; could fold into predecessor if needed too.

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7show-branch: show reflog messagebuiltin/show-branch.c t/t3202-show-branch.sh+22 -50 replies
2/7refs: trim newline from reflog messagebuiltin/show-branch.c reflog-walk.c refs/files-backend.c +2 more+21 -290 replies
3/7test-ref-store: tweaks to for-each-reflog-ent formatt/helper/test-ref-store.c t/t1405-main-ref-store.sh+3 -30 replies
4/7t1400: use test-helper ref-store to inspect reflog contentst/t1400-update-ref.sh+11 -70 replies
5/7refs: drop force_create argument of create_reflog APIbuiltin/checkout.c refs.c refs.h +7 more+16 -210 replies
6/7RFC: refs: reflog entries aren't written based on reflog existence.refs/files-backend.c t/t1400-update-ref.sh+19 -390 replies
7/7refs: change log_ref_setup calling conventionrefs/files-backend.c+20 -280 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [PATCH v3 0/7] Gets rid of "if reflog exists, append to it regardless of config settings"

<As discussed in CAFQ2z_Ps3YxycA+NJ9VKt_PEXb+m83JdNB7ujzWw1fTPKyZ=fg@mail.gmail.com

v3:

* fix show-branch
* add some more context to commit messages
* change calling convention for log_ref_setup; could fold into predecessor if needed too.

Han-Wen Nienhuys (7):
show-branch: show reflog message
refs: trim newline from reflog message
test-ref-store: tweaks to for-each-reflog-ent format
t1400: use test-helper ref-store to inspect reflog contents
refs: drop force_create argument of create_reflog API
RFC: refs: reflog entries aren't written based on reflog existence.
refs: change log_ref_setup calling convention

 builtin/checkout.c             |   2 +-
 builtin/show-branch.c          |   7 +-
 reflog-walk.c                  |   6 +-
 refs.c                         |   9 ++-
 refs.h                         |   4 +-
 refs/debug.c                   |   5 +-
 refs/files-backend.c           | 128 +++++++++++++--------------------
 refs/packed-backend.c          |   3 +-
 refs/refs-internal.h           |   2 +-
 t/helper/test-ref-store.c      |   8 +--
 t/t1400-update-ref.sh          |  21 +++---
 t/t1405-main-ref-store.sh      |   6 +-
 t/t1406-submodule-ref-store.sh |   6 +-
 t/t3202-show-branch.sh         |  15 ++++
 14 files changed, 101 insertions(+), 121 deletions(-)

base-commit: e0a2f5cbc585657e757385ad918f167f519cfb96
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1067%2Fhanwen%2Freflog-touch-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1067/hanwen/reflog-touch-v3
Pull-Request: https://github.com/git/git/pull/1067

Range-diff vs v2:

 -:  ----------- > 1:  e158882812f show-branch: show reflog message
 1:  995d450da42 ! 2:  d16d94164c1 refs: trim newline from reflog message

@@ Commit message

## builtin/show-branch.c ##
@@ builtin/show-branch.c: int cmd_show_branch(int ac, const char **av, const char *prefix)
- show_one_commit(rev[i], 1);
+ char *logmsg;
+ char *nth_desc;
+ const char *msg;
+- char *end;
+ timestamp_t timestamp;
+ int tz;
+
+@@ builtin/show-branch.c: int cmd_show_branch(int ac, const char **av, const char *prefix)
+ break;
}
- else
-- puts(reflog_msg[i]);
-+ puts(reflog_msg[i]); /* XXX - this puts a
-+ newline. Did we put two
-+ newlines beforehand? */

- if (is_head)
- head_at = i;
+- end = strchr(logmsg, '\n');
+- if (end)
+- *end = '\0';
+-
+ msg = (*logmsg == '\0') ? "(none)" : logmsg;
+ reflog_msg[i] = xstrfmt("(%s) %s",
+ show_date(timestamp, tz,

## reflog-walk.c ##
@@ reflog-walk.c: void get_reflog_message(struct strbuf *sb,

 2:  11b296a55e9 = 3:  e273963216c test-ref-store: tweaks to for-each-reflog-ent format
 3:  9ec09cc64cd = 4:  52093fce57c t1400: use test-helper ref-store to inspect reflog contents
 4:  aa25fd9b7de ! 5:  ce0047028dd refs: drop force_create argument of create_reflog API

@@ Commit message
There is only one caller, builtin/checkout.c, and it hardcodes force_create=1.

+ This argument was introduced in abd0cd3a301 (refs: new public ref function:
+ safe_create_reflog, 2015-07-21), which promised to immediately use it in a
+ follow-on commit, but that never happened.
+

## builtin/checkout.c ##
@@ refs/files-backend.c: error:
int fd;

- if (log_ref_setup(refs, refname, force_create, &fd, err))
-+ if (log_ref_setup(refs, refname, /*force_create=*/1, &fd, err))
++ if (log_ref_setup(refs, refname, 1, &fd, err))
return -1;

if (fd >= 0)
5: f6a7c5ad56e ! 6: 7a030cfd3e2 RFC: refs: reflog entries aren't written based on reflog existence.
@@ Commit message
The reftable storage backend cannot distinguish between a non-existing reflog, and an empty one. Therefore it cannot mimick this functionality.

- In CAFQ2z_Ps3YxycA+NJ9VKt_PEXb+m83JdNB7ujzWw1fTPKyZ=fg@mail.gmail.com,
- we came to the conclusion that this feature is probably a remnant from
- the time that reflogs weren't enabled by default, and it does not need
- to be kept.
+ With this feature, it is possible to mark only specific branches as subject to
+ reflog updates. When introduced, it presumably served as a cheap substitute for
+ introducing branch.$NAME.logRefUpdate configuration setting.
+
+ Reflogs are small and don't impact the runtime of normal operations, so this
+ flexibility is not very useful. Since it incurs complexity for alternate ref
+ backends, we remove it.
+
+ Further background to this change is in
+ <CAFQ2z_Ps3YxycA+NJ9VKt_PEXb+m83JdNB7ujzWw1fTPKyZ=fg@mail.gmail.com>.

-: ----------- > 7: 1124dbad594 refs: change log_ref_setup calling convention

Signature · 1 line
gitgitgadget