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

[PATCH 2/3] checkout: respect GIT_REFLOG_ACTION

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Jun 10, 2013, 16:22 UTC
Message-ID
<1370881332-9231-3-git-send-email-artagnon@gmail.com>
In-Reply-To
<1370881332-9231-1-git-send-email-artagnon@gmail.com>

GIT_REFLOG_ACTION is an environment variable specifying the reflog message to write after an action is completed. Other commands including merge, reset, and commit respect it.

This incidentally fixes a bug in t/checkout-last.  You can now expect
  $ git checkout -
to work fine after an interactive rebase.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 builtin/checkout.c       | 11 ++++++++---
 t/t2012-checkout-last.sh |  2 +-
 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index f5b50e5..1e2af85 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -587,7 +587,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
 				   struct branch_info *new)
 {
 	struct strbuf msg = STRBUF_INIT;
-	const char *old_desc;
+	const char *old_desc, *reflog_msg;
 	if (opts->new_branch) {
 		if (opts->new_orphan_branch) {
 			if (opts->new_branch_log && !log_all_ref_updates) {
@@ -620,8 +620,13 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
 	old_desc = old->name;
 	if (!old_desc && old->commit)
 		old_desc = sha1_to_hex(old->commit->object.sha1);
-	strbuf_addf(&msg, "checkout: moving from %s to %s",
-		    old_desc ? old_desc : "(invalid)", new->name);
+
+	reflog_msg = getenv("GIT_REFLOG_ACTION");
+	if (!reflog_msg)
+		strbuf_addf(&msg, "checkout: moving from %s to %s",
+			old_desc ? old_desc : "(invalid)", new->name);
+	else
+		strbuf_insert(&msg, 0, reflog_msg, strlen(reflog_msg));
 
 	if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
 		/* Nothing to do. */
diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh
index 5729487..ab80da7 100755
--- a/t/t2012-checkout-last.sh
+++ b/t/t2012-checkout-last.sh
@@ -116,7 +116,7 @@ test_expect_success 'master...' '
 	test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
 '
 
-test_expect_failure '"checkout -" works after an interactive rebase' '
+test_expect_success '"checkout -" works after an interactive rebase' '
 	git checkout master &&
 	git checkout other &&
 	git rebase -i master &&
-- 
1.8.3.254.g60f9e5b
Previous: Ramkumar RamachandraNext: Junio C Hamano
Message 5 of 12 in “Fix git checkout - (early preview)”
  1. 0/3 Fix git checkout - (early preview)Ramkumar Ramachandra, Jun 10, 2013
  2. 1/3 t/checkout-last: checkout - doesn't work after rebase -iRamkumar Ramachandra, Jun 10, 2013
  3. Junio C HamanoJun 10, 2013
  4. Ramkumar RamachandraJun 13, 2013
  5. 2/3 checkout: respect GIT_REFLOG_ACTIONRamkumar Ramachandra, Jun 10, 2013
  6. Junio C HamanoJun 10, 2013
  7. 3/3 rebase -i: write better reflog messages for startRamkumar Ramachandra, Jun 10, 2013
  8. Junio C HamanoJun 10, 2013
  9. Ramkumar RamachandraJun 10, 2013
  10. Ramkumar RamachandraJun 13, 2013
  11. Junio C HamanoJun 13, 2013
  12. Ramkumar RamachandraJun 13, 2013

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.