From: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
"D. Ben Knoble" <ben.knoble@gmail.com>,
Harald Nordgren <haraldnordgren@gmail.com>,
Harald Nordgren <haraldnordgren@gmail.com>
Subject: [PATCH v2 1/3] reflog: name the strings that mark switches, renames and rebase steps
Date: Sun, 18 Oct 2026 18:27:15 +0000 [thread overview]
Message-ID: <745929bd805784bebeccc7e3ddee638aaffaeded.1792348037.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2448.v2.git.git.1792348037.gitgitgadget@gmail.com>
From: Harald Nordgren <haraldnordgren@gmail.com>
The next commit adds "git reflog --operations", which finds branch
switches, branch renames and the start and end of a rebase by the
messages they leave in the reflog. The commands that write these
messages spell out the strings by hand, and "@{-<n>}" and "git status"
each keep their own copy of the switch prefix to read it back. Reading
them in one more place would add yet another copy that has to stay in
sync.
Name the strings once in reflog.h and use the names wherever the
messages are written or read: the "checkout: moving from " prefix
written by "git checkout", the "Branch: renamed " prefix written by
"git branch -m", and the "start", "finish" and "abort" steps written
by "git rebase".
No change in behavior.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
---
builtin/branch.c | 3 ++-
builtin/checkout.c | 3 ++-
builtin/rebase.c | 17 +++++++++--------
object-name.c | 3 ++-
reflog.h | 6 ++++++
sequencer.c | 13 +++++++------
wt-status.c | 3 ++-
7 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index a613148fc7..30062ceb7c 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -13,6 +13,7 @@
#include "editor.h"
#include "environment.h"
#include "refs.h"
+#include "reflog.h"
#include "commit.h"
#include "gettext.h"
#include "object-name.h"
@@ -669,7 +670,7 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
strbuf_addf(&logmsg, "Branch: copied %s to %s",
oldref.buf, newref.buf);
else
- strbuf_addf(&logmsg, "Branch: renamed %s to %s",
+ strbuf_addf(&logmsg, REFLOG_RENAME_PREFIX "%s to %s",
oldref.buf, newref.buf);
if (!copy && !(oldref_usage & IS_ORPHAN) &&
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2d575a4f57..f011284084 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -25,6 +25,7 @@
#include "preload-index.h"
#include "read-cache.h"
#include "refs.h"
+#include "reflog.h"
#include "remote.h"
#include "repo-settings.h"
#include "resolve-undo.h"
@@ -999,7 +1000,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
reflog_msg = getenv("GIT_REFLOG_ACTION");
if (!reflog_msg)
- strbuf_addf(&msg, "checkout: moving from %s to %s",
+ strbuf_addf(&msg, REFLOG_SWITCH_PREFIX "%s to %s",
old_desc ? old_desc : "(invalid)", new_branch_info->name);
else
strbuf_insertstr(&msg, 0, reflog_msg);
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 535db60181..26ef589e89 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -17,6 +17,7 @@
#include "strvec.h"
#include "dir.h"
#include "refs.h"
+#include "reflog.h"
#include "config.h"
#include "unpack-trees.h"
#include "lockfile.h"
@@ -601,11 +602,11 @@ static int move_to_original_branch(struct rebase_options *opts)
if (!opts->onto)
BUG("move_to_original_branch without onto");
- strbuf_addf(&branch_reflog, "%s (finish): %s onto %s",
- opts->reflog_action,
+ strbuf_addf(&branch_reflog, "%s (%s): %s onto %s",
+ opts->reflog_action, REFLOG_STEP_FINISH,
opts->head_name, oid_to_hex(&opts->onto->object.oid));
- strbuf_addf(&head_reflog, "%s (finish): returning to %s",
- opts->reflog_action, opts->head_name);
+ strbuf_addf(&head_reflog, "%s (%s): returning to %s",
+ opts->reflog_action, REFLOG_STEP_FINISH, opts->head_name);
ropts.branch = opts->head_name;
ropts.flags = RESET_WORKING_TREE_REFS_ONLY |
RESET_WORKING_TREE_UPDATE_HEAD;
@@ -1413,8 +1414,8 @@ int cmd_rebase(int argc,
if (read_basic_state(&options))
exit(1);
- strbuf_addf(&head_msg, "%s (abort): returning to %s",
- options.reflog_action,
+ strbuf_addf(&head_msg, "%s (%s): returning to %s",
+ options.reflog_action, REFLOG_STEP_ABORT,
options.head_name ? options.head_name
: oid_to_hex(&options.orig_head->object.oid));
ropts.oid = &options.orig_head->object.oid;
@@ -1884,8 +1885,8 @@ int cmd_rebase(int argc,
printf(_("First, rewinding head to replay your work on top of "
"it...\n"));
- strbuf_addf(&msg, "%s (start): checkout %s",
- options.reflog_action, options.onto_name);
+ strbuf_addf(&msg, "%s (%s): checkout %s", options.reflog_action,
+ REFLOG_STEP_START, options.onto_name);
ropts.oid = &options.onto->object.oid;
ropts.orig_head = &options.orig_head->object.oid;
ropts.flags = RESET_WORKING_TREE_DETACH |
diff --git a/object-name.c b/object-name.c
index 6546685760..5b6ce8e0e0 100644
--- a/object-name.c
+++ b/object-name.c
@@ -13,6 +13,7 @@
#include "tree.h"
#include "tree-walk.h"
#include "refs.h"
+#include "reflog.h"
#include "remote.h"
#include "dir.h"
#include "odb.h"
@@ -1251,7 +1252,7 @@ static int grab_nth_branch_switch(const char *refname UNUSED,
const char *match = NULL, *target = NULL;
size_t len;
- if (skip_prefix(message, "checkout: moving from ", &match))
+ if (skip_prefix(message, REFLOG_SWITCH_PREFIX, &match))
target = strstr(match, " to ");
if (!match || !target)
diff --git a/reflog.h b/reflog.h
index 3bdd1ca8a5..32c3737db4 100644
--- a/reflog.h
+++ b/reflog.h
@@ -2,6 +2,12 @@
#define REFLOG_H
#include "refs.h"
+#define REFLOG_SWITCH_PREFIX "checkout: moving from "
+#define REFLOG_RENAME_PREFIX "Branch: renamed "
+#define REFLOG_STEP_START "start"
+#define REFLOG_STEP_FINISH "finish"
+#define REFLOG_STEP_ABORT "abort"
+
#define REFLOG_EXPIRE_TOTAL (1 << 0)
#define REFLOG_EXPIRE_UNREACH (1 << 1)
diff --git a/sequencer.c b/sequencer.c
index efbfd1315b..c55df2d38f 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -31,6 +31,7 @@
#include "merge-ort.h"
#include "merge-ort-wrappers.h"
#include "refs.h"
+#include "reflog.h"
#include "sparse-index.h"
#include "strvec.h"
#include "quote.h"
@@ -5011,8 +5012,8 @@ static int checkout_onto(struct repository *r, struct replay_opts *opts,
RESET_WORKING_TREE_UPDATE_HEAD |
RESET_WORKING_TREE_UPDATE_ORIG_HEAD |
RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK,
- .head_msg = reflog_message(opts, "start", "checkout %s",
- onto_name),
+ .head_msg = reflog_message(opts, REFLOG_STEP_START,
+ "checkout %s", onto_name),
.default_reflog_action = sequencer_reflog_action(opts)
};
if (reset_working_tree(r, &ropts)) {
@@ -5310,16 +5311,16 @@ cleanup_head_ref:
res = error(_("could not read 'onto'"));
goto cleanup_head_ref;
}
- msg = reflog_message(opts, "finish", "%s onto %s",
- head_ref.buf, buf.buf);
+ msg = reflog_message(opts, REFLOG_STEP_FINISH,
+ "%s onto %s", head_ref.buf, buf.buf);
if (refs_update_ref(get_main_ref_store(the_repository), msg, head_ref.buf, &head, &orig,
REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
res = error(_("could not update %s"),
head_ref.buf);
goto cleanup_head_ref;
}
- msg = reflog_message(opts, "finish", "returning to %s",
- head_ref.buf);
+ msg = reflog_message(opts, REFLOG_STEP_FINISH,
+ "returning to %s", head_ref.buf);
if (refs_update_symref(get_main_ref_store(the_repository), "HEAD", head_ref.buf, msg)) {
res = error(_("could not update HEAD to %s"),
head_ref.buf);
diff --git a/wt-status.c b/wt-status.c
index 57772c7501..ffd54353a8 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -22,6 +22,7 @@
#include "strvec.h"
#include "remote.h"
#include "refs.h"
+#include "reflog.h"
#include "submodule.h"
#include "column.h"
#include "read-cache.h"
@@ -1790,7 +1791,7 @@ static int grab_1st_switch(const char *refname UNUSED,
struct grab_1st_switch_cbdata *cb = cb_data;
const char *target = NULL, *end;
- if (!skip_prefix(message, "checkout: moving from ", &message))
+ if (!skip_prefix(message, REFLOG_SWITCH_PREFIX, &message))
return 0;
target = strstr(message, " to ");
if (!target)
--
gitgitgadget
next prev parent reply other threads:[~2026-10-18 18:27 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 13:13 [PATCH 0/3] reflog: add --operations and --historical-branch Harald Nordgren via GitGitGadget
2026-10-15 13:13 ` [PATCH 1/3] reflog: name the strings that mark switches, renames and rebase steps Harald Nordgren via GitGitGadget
2026-10-15 14:35 ` Kristoffer Haugsbakk
2026-10-15 20:52 ` Harald Nordgren
2026-10-15 13:13 ` [PATCH 2/3] reflog: add --operations to show one entry per command Harald Nordgren via GitGitGadget
2026-10-15 13:13 ` [PATCH 3/3] reflog: add --historical-branch to name the branch of each entry Harald Nordgren via GitGitGadget
2026-10-15 14:36 ` [PATCH 0/3] reflog: add --operations and --historical-branch Kristoffer Haugsbakk
2026-10-15 15:24 ` Harald Nordgren
2026-10-15 15:35 ` Kristoffer Haugsbakk
2026-10-15 20:47 ` Harald Nordgren
2026-10-16 18:26 ` D. Ben Knoble
2026-10-16 18:36 ` D. Ben Knoble
2026-10-17 10:03 ` Harald Nordgren
2026-10-18 18:27 ` [PATCH v2 " Harald Nordgren via GitGitGadget
2026-10-18 18:27 ` Harald Nordgren via GitGitGadget [this message]
2026-10-18 18:27 ` [PATCH v2 2/3] reflog: add --operations to show one entry per command Harald Nordgren via GitGitGadget
2026-10-18 18:27 ` [PATCH v2 3/3] reflog: add --historical-branch to name the branch of each entry Harald Nordgren via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=745929bd805784bebeccc7e3ddee638aaffaeded.1792348037.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=ben.knoble@gmail.com \
--cc=git@vger.kernel.org \
--cc=haraldnordgren@gmail.com \
--cc=kristofferhaugsbakk@fastmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox