branch: show more information when HEAD is detached
This prints more helpful info when HEAD is detached: is it detached because of bisect or rebase? What is the original branch name in those cases? Is it detached because the user checks out a remote ref or a tag (and which one)? Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b397ea4863
commit
c8183cd285
@ -18,6 +18,7 @@
|
||||
#include "string-list.h"
|
||||
#include "column.h"
|
||||
#include "utf8.h"
|
||||
#include "wt-status.h"
|
||||
|
||||
static const char * const builtin_branch_usage[] = {
|
||||
N_("git branch [options] [-r | -a] [--merged | --no-merged]"),
|
||||
@ -550,6 +551,29 @@ static int calc_maxwidth(struct ref_list *refs)
|
||||
return w;
|
||||
}
|
||||
|
||||
static char *get_head_description(void)
|
||||
{
|
||||
struct strbuf desc = STRBUF_INIT;
|
||||
struct wt_status_state state;
|
||||
memset(&state, 0, sizeof(state));
|
||||
wt_status_get_state(&state, 1);
|
||||
if (state.rebase_in_progress ||
|
||||
state.rebase_interactive_in_progress)
|
||||
strbuf_addf(&desc, _("(no branch, rebasing %s)"),
|
||||
state.branch);
|
||||
else if (state.bisect_in_progress)
|
||||
strbuf_addf(&desc, _("(no branch, bisecting %s)"),
|
||||
state.branch);
|
||||
else if (state.detached_from)
|
||||
strbuf_addf(&desc, _("(detached from %s)"),
|
||||
state.detached_from);
|
||||
else
|
||||
strbuf_addstr(&desc, _("(no branch)"));
|
||||
free(state.branch);
|
||||
free(state.onto);
|
||||
free(state.detached_from);
|
||||
return strbuf_detach(&desc, NULL);
|
||||
}
|
||||
|
||||
static void show_detached(struct ref_list *ref_list)
|
||||
{
|
||||
@ -557,7 +581,7 @@ static void show_detached(struct ref_list *ref_list)
|
||||
|
||||
if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) {
|
||||
struct ref_item item;
|
||||
item.name = xstrdup(_("(no branch)"));
|
||||
item.name = get_head_description();
|
||||
item.width = utf8_strwidth(item.name);
|
||||
item.kind = REF_LOCAL_BRANCH;
|
||||
item.dest = NULL;
|
||||
|
@ -94,13 +94,13 @@ test_expect_success 'git branch -v pattern does not show branch summaries' '
|
||||
test_must_fail git branch -v branch*
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
* (no branch)
|
||||
test_expect_success 'git branch shows detached HEAD properly' '
|
||||
cat >expect <<EOF &&
|
||||
* (detached from $(git rev-parse --short HEAD^0))
|
||||
branch-one
|
||||
branch-two
|
||||
master
|
||||
EOF
|
||||
test_expect_success 'git branch shows detached HEAD properly' '
|
||||
git checkout HEAD^0 &&
|
||||
git branch >actual &&
|
||||
test_i18ncmp expect actual
|
||||
|
@ -164,7 +164,7 @@ test_expect_success 'bisect start: existing ".git/BISECT_START" not modified if
|
||||
cp .git/BISECT_START saved &&
|
||||
test_must_fail git bisect start $HASH4 foo -- &&
|
||||
git branch > branch.output &&
|
||||
test_i18ngrep "* (no branch)" branch.output > /dev/null &&
|
||||
test_i18ngrep "* (no branch, bisecting other)" branch.output > /dev/null &&
|
||||
test_cmp saved .git/BISECT_START
|
||||
'
|
||||
test_expect_success 'bisect start: no ".git/BISECT_START" if mistaken rev' '
|
||||
|
Loading…
Reference in New Issue
Block a user