Skip to content

Commit

Permalink
branch: name detached HEAD analogous to status
Browse files Browse the repository at this point in the history
"git status" carefully names a detached HEAD "at" resp. "from" a rev or
ref depending on whether the detached HEAD has moved since. "git branch"
always uses "from", which can be confusing, because a status-aware user
would interpret this as moved detached HEAD.

Make "git branch" use the same logic and wording.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael J Gruber authored and Junio C Hamano committed Mar 6, 2015
1 parent 970399e commit 4b06318
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 4 deletions.
13 changes: 10 additions & 3 deletions builtin/branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -589,9 +589,16 @@ static char *get_head_description(void)
else if (state.bisect_in_progress)
strbuf_addf(&desc, _("(no branch, bisect started on %s)"),
state.branch);
else if (state.detached_from)
strbuf_addf(&desc, _("(detached from %s)"),
state.detached_from);
else if (state.detached_from) {
/* TRANSLATORS: make sure these match _("HEAD detached at ")
and _("HEAD detached from ") in wt-status.c */
if (state.detached_at)
strbuf_addf(&desc, _("(HEAD detached at %s)"),
state.detached_from);
else
strbuf_addf(&desc, _("(HEAD detached from %s)"),
state.detached_from);
}
else
strbuf_addstr(&desc, _("(no branch)"));
free(state.branch);
Expand Down
39 changes: 38 additions & 1 deletion t/t3203-branch-output.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ test_expect_success 'git branch -v pattern does not show branch summaries' '

test_expect_success 'git branch shows detached HEAD properly' '
cat >expect <<EOF &&
* (detached from $(git rev-parse --short HEAD^0))
* (HEAD detached at $(git rev-parse --short HEAD^0))
branch-one
branch-two
master
Expand All @@ -106,4 +106,41 @@ EOF
test_i18ncmp expect actual
'

test_expect_success 'git branch shows detached HEAD properly after moving' '
cat >expect <<EOF &&
* (HEAD detached from $(git rev-parse --short HEAD))
branch-one
branch-two
master
EOF
git reset --hard HEAD^1 &&
git branch >actual &&
test_i18ncmp expect actual
'

test_expect_success 'git branch shows detached HEAD properly from tag' '
cat >expect <<EOF &&
* (HEAD detached at fromtag)
branch-one
branch-two
master
EOF
git tag fromtag master &&
git checkout fromtag &&
git branch >actual &&
test_i18ncmp expect actual
'

test_expect_success 'git branch shows detached HEAD properly after moving from tag' '
cat >expect <<EOF &&
* (HEAD detached from fromtag)
branch-one
branch-two
master
EOF
git reset --hard HEAD^1 &&
git branch >actual &&
test_i18ncmp expect actual
'

test_done

0 comments on commit 4b06318

Please sign in to comment.