`git branch -v` before: fc/branch/nice-verbose 4761939 [master] branch: reorganize verbose options `git branch -v` after: fc/branch/nice-verbose 4761939 [ahead 1] branch: reorganize verbose options Showing the upstream tracking branch is more important than how many commits are ahead/behind, after all you need to know ahead/behind compared to _what_. So now `git branch -v` shows the upstream, but not the tracking info, and `git branch -vv` shows all information (unchanged). An additional benefit is that `git branch -v` is now much faster: Before: git branch -v 0.01s user 0.01s system 90% cpu 0.014 total After: git branch -v 1.67s user 0.03s system 99% cpu 1.698 total Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- builtin/branch.c | 76 +++++++++++++++++++++--------------------------- t/t6040-tracking-info.sh | 12 ++++---- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/builtin/branch.c b/builtin/branch.c index b4d7716..8013540 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -417,29 +417,35 @@ 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 show_tracking) { int ours, theirs; char *ref = NULL; struct branch *branch = branch_get(branch_name); struct strbuf fancy = STRBUF_INIT; int upstream_is_gone = 0; - int added_decoration = 1; - switch (stat_tracking_info(branch, &ours, &theirs)) { - case 0: - /* no base */ + if (!branch) return; - case -1: - /* with "gone" base */ - upstream_is_gone = 1; - break; - default: - /* with base */ - break; + + if (show_tracking) { + switch (stat_tracking_info(branch, &ours, &theirs)) { + case 0: + /* no base */ + return; + case -1: + /* with "gone" base */ + upstream_is_gone = 1; + break; + default: + /* with base */ + break; + } + } else { + ours = theirs = 0; } - if (show_upstream_ref) { + if (branch->merge && branch->merge[0] && branch->merge[0]->dst) { ref = shorten_unambiguous_ref(branch->merge[0]->dst, 0); if (want_color(branch_use_color)) strbuf_addf(&fancy, "%s%s%s", @@ -448,39 +454,23 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name, else strbuf_addstr(&fancy, ref); } + if (!fancy.len) + return; - if (upstream_is_gone) { - if (show_upstream_ref) - strbuf_addf(stat, _("[%s: gone]"), fancy.buf); - else - added_decoration = 0; - } else if (!ours && !theirs) { - if (show_upstream_ref) - strbuf_addf(stat, _("[%s]"), fancy.buf); - else - added_decoration = 0; - } else if (!ours) { - if (show_upstream_ref) - strbuf_addf(stat, _("[%s: behind %d]"), fancy.buf, theirs); - else - strbuf_addf(stat, _("[behind %d]"), theirs); + if (upstream_is_gone) + strbuf_addf(stat, _("[%s: gone]"), fancy.buf); + else if (!ours && !theirs) + strbuf_addf(stat, _("[%s]"), fancy.buf); + else if (!ours) + strbuf_addf(stat, _("[%s: behind %d]"), fancy.buf, theirs); + else if (!theirs) + strbuf_addf(stat, _("[%s: ahead %d]"), fancy.buf, ours); + else + strbuf_addf(stat, _("[%s: ahead %d, behind %d]"), + fancy.buf, ours, theirs); - } else if (!theirs) { - if (show_upstream_ref) - strbuf_addf(stat, _("[%s: ahead %d]"), fancy.buf, ours); - else - strbuf_addf(stat, _("[ahead %d]"), ours); - } else { - if (show_upstream_ref) - strbuf_addf(stat, _("[%s: ahead %d, behind %d]"), - fancy.buf, ours, theirs); - else - strbuf_addf(stat, _("[ahead %d, behind %d]"), - ours, theirs); - } strbuf_release(&fancy); - if (added_decoration) - strbuf_addch(stat, ' '); + strbuf_addch(stat, ' '); free(ref); } diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh index 7ac8fd0..af26db5 100755 --- a/t/t6040-tracking-info.sh +++ b/t/t6040-tracking-info.sh @@ -41,12 +41,12 @@ test_expect_success setup ' script='s/^..\(b.\) *[0-9a-f]* \(.*\)$/\1 \2/p' cat >expect <<\EOF -b1 [ahead 1, behind 1] d -b2 [ahead 1, behind 1] d -b3 [behind 1] b -b4 [ahead 2] f -b5 g -b6 c +b1 [origin/master] d +b2 [origin/master] d +b3 [origin/master] b +b4 [origin/master] f +b5 [brokenbase] g +b6 [origin/master] c EOF test_expect_success 'branch -v' ' -- 1.9.1+fc3.9.gc73078e -- 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