diff --git a/builtin/branch.c b/builtin/branch.c index 6a25957e9f..1d150378e9 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -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); diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh index ba4f98e800..f51d0f3cad 100755 --- a/t/t3203-branch-output.sh +++ b/t/t3203-branch-output.sh @@ -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 <expect <actual && + test_i18ncmp expect actual +' + +test_expect_success 'git branch shows detached HEAD properly from tag' ' + cat >expect <actual && + test_i18ncmp expect actual +' + +test_expect_success 'git branch shows detached HEAD properly after moving from tag' ' + cat >expect <actual && + test_i18ncmp expect actual +' + test_done diff --git a/wt-status.c b/wt-status.c index 422dc0e70c..7036fa28dc 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1242,6 +1242,8 @@ static void wt_status_get_detached_from(struct wt_status_state *state) state->detached_from = xstrdup(find_unique_abbrev(cb.nsha1, DEFAULT_ABBREV)); hashcpy(state->detached_sha1, cb.nsha1); + state->detached_at = !get_sha1("HEAD", sha1) && + !hashcmp(sha1, state->detached_sha1); free(ref); strbuf_release(&cb.buf); @@ -1330,10 +1332,8 @@ void wt_status_print(struct wt_status *s) on_what = _("rebase in progress; onto "); branch_name = state.onto; } else if (state.detached_from) { - unsigned char sha1[20]; branch_name = state.detached_from; - if (!get_sha1("HEAD", sha1) && - !hashcmp(sha1, state.detached_sha1)) + if (state.detached_at) on_what = _("HEAD detached at "); else on_what = _("HEAD detached from "); diff --git a/wt-status.h b/wt-status.h index 283a9fef03..e0a99f75c7 100644 --- a/wt-status.h +++ b/wt-status.h @@ -84,6 +84,7 @@ struct wt_status_state { int cherry_pick_in_progress; int bisect_in_progress; int revert_in_progress; + int detached_at; char *branch; char *onto; char *detached_from;