Skip to content

Commit

Permalink
checkout: respect GIT_REFLOG_ACTION
Browse files Browse the repository at this point in the history
GIT_REFLOG_ACTION is an environment variable specifying the reflog
message to write after an action is completed.  Several other commands
including merge, reset, and commit respect it.

Fix the failing tests in t/checkout-last by making checkout respect it
too.  You can now expect

  $ git checkout -

to work as expected after any operation that internally uses "checkout"
as its implementation detail, e.g. "rebase".

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
artagnon authored and gitster committed Jun 17, 2013
1 parent ec50631 commit 3bed291
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
11 changes: 8 additions & 3 deletions builtin/checkout.c
Expand Up @@ -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) {
Expand Down Expand Up @@ -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. */
Expand Down
8 changes: 4 additions & 4 deletions t/t2012-checkout-last.sh
Expand Up @@ -116,15 +116,15 @@ test_expect_success 'master...' '
test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
'

test_expect_failure '"checkout -" works after a rebase A' '
test_expect_success '"checkout -" works after a rebase A' '
git checkout master &&
git checkout other &&
git rebase master &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
'

test_expect_failure '"checkout -" works after a rebase A B' '
test_expect_success '"checkout -" works after a rebase A B' '
git branch moodle master~1 &&
git checkout master &&
git checkout other &&
Expand All @@ -133,15 +133,15 @@ test_expect_failure '"checkout -" works after a rebase A B' '
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
'

test_expect_failure '"checkout -" works after a rebase -i A' '
test_expect_success '"checkout -" works after a rebase -i A' '
git checkout master &&
git checkout other &&
git rebase -i master &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
'

test_expect_failure '"checkout -" works after a rebase -i A B' '
test_expect_success '"checkout -" works after a rebase -i A B' '
git branch foodle master~1 &&
git checkout master &&
git checkout other &&
Expand Down

0 comments on commit 3bed291

Please sign in to comment.