ahead/behind info is expensive, upstream name info cheap. Therefore, make -v output the upstream branch name and -vv add the ahead/behind info. Signed-off-by: Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> --- Documentation/git-branch.txt | 4 ++-- builtin/branch.c | 34 ++++++++++++++++------------------ t/t6040-tracking-info.sh | 8 ++++---- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt index 789ff02..59d729a 100644 --- a/Documentation/git-branch.txt +++ b/Documentation/git-branch.txt @@ -115,8 +115,8 @@ OPTIONS -v:: --verbose:: Show sha1 and commit subject line for each head, along with - relationship to upstream branch (if any). If given twice, print - the name of the upstream branch, as well. + the name of the upstream branch (if any). If given twice, print + the relationship to the upstream branch (ahead/behind), as well. `--list` is implied by all verbosity options. --abbrev=<length>:: diff --git a/builtin/branch.c b/builtin/branch.c index aed0aca..21ef5fc 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -359,29 +359,27 @@ static int ref_cmp(const void *r1, const void *r2) } static void fill_tracking_info(struct strbuf *stat, const char *branch_name, - int show_upstream_ref) + int verbose) { int ours, theirs; struct branch *branch = branch_get(branch_name); - if (!stat_tracking_info(branch, &ours, &theirs)) { - if (branch && branch->merge && branch->merge[0]->dst && - show_upstream_ref) - strbuf_addf(stat, "[%s] ", - shorten_unambiguous_ref(branch->merge[0]->dst, 0)); + /* verbose >= 1 */ + if (!(branch && branch->merge && branch->merge[0]->dst)) return; - } - strbuf_addch(stat, '['); - if (show_upstream_ref) - strbuf_addf(stat, "%s: ", - shorten_unambiguous_ref(branch->merge[0]->dst, 0)); - if (!ours) - strbuf_addf(stat, _("behind %d] "), theirs); - else if (!theirs) - strbuf_addf(stat, _("ahead %d] "), ours); - else - strbuf_addf(stat, _("ahead %d, behind %d] "), ours, theirs); + strbuf_addstr(stat, shorten_unambiguous_ref(branch->merge[0]->dst, 0)); + + if (verbose >= 2 && stat_tracking_info(branch, &ours, &theirs)) { + strbuf_addstr(stat, ": "); + if (!ours) + strbuf_addf(stat, _("behind %d"), theirs); + else if (!theirs) + strbuf_addf(stat, _("ahead %d"), ours); + else + strbuf_addf(stat, _("ahead %d, behind %d"), ours, theirs); + } + strbuf_addstr(stat, "] "); } static int matches_merge_filter(struct commit *commit) @@ -408,7 +406,7 @@ static void add_verbose_info(struct strbuf *out, struct ref_item *item, } if (item->kind == REF_LOCAL_BRANCH) - fill_tracking_info(&stat, item->name, verbose > 1); + fill_tracking_info(&stat, item->name, verbose); strbuf_addf(out, " %s %s%s", find_unique_abbrev(item->commit->object.sha1, abbrev), diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh index 19272bc..9539882 100755 --- a/t/t6040-tracking-info.sh +++ b/t/t6040-tracking-info.sh @@ -36,10 +36,10 @@ test_expect_success setup ' script='s/^..\(b.\)[ 0-9a-f]*\[\([^]]*\)\].*/\1 \2/p' cat >expect <<\EOF -b1 ahead 1, behind 1 -b2 ahead 1, behind 1 -b3 behind 1 -b4 ahead 2 +b1 origin/master +b2 origin/master +b3 origin/master +b4 origin/master EOF test_expect_success 'branch -v' ' -- 1.7.6.845.gc3c05 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html