{"thread":{"id":"36455","subject":"[PATCH try3] branch: reorganize verbose options","startedAt":"2014-04-20T20:58:34Z","lastAt":"2014-04-20T20:58:34Z","messageCount":1,"participants":["Felipe Contreras"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"239180","messageId":"1398027514-19399-1-git-send-email-felipe.contreras@gmail.com","threadId":"36455","inReplyTo":null,"subject":"[PATCH try3] branch: reorganize verbose options","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2014-04-20T20:58:34Z","receivedAt":"2014-04-20T20:58:34Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"`git branch -v` before:\n\n  fc/branch/nice-verbose 4761939 [master] branch: reorganize verbose options\n\n`git branch -v` after:\n\n  fc/branch/nice-verbose 4761939 [ahead 1] branch: reorganize verbose options\n\nShowing the upstream tracking branch is more important than how many commits\nare ahead/behind, after all you need to know ahead/behind compared to _what_.\nSo now `git branch -v` shows the upstream, but not the tracking info, and\n`git branch -vv` shows all information (unchanged).\n\nAn additional benefit is that `git branch -v` is now much faster:\n\nBefore:\n\n git branch -v  0.01s user 0.01s system 90% cpu 0.014 total\n\nAfter:\n\n git branch -v  1.67s user 0.03s system 99% cpu 1.698 total\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n builtin/branch.c         | 76 +++++++++++++++++++++---------------------------\n t/t6040-tracking-info.sh | 12 ++++----\n 2 files changed, 39 insertions(+), 49 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex b4d7716..8013540 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -417,29 +417,35 @@ static int ref_cmp(const void *r1, const void *r2)\n }\n \n static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n-\t\tint show_upstream_ref)\n+\t\tint show_tracking)\n {\n \tint ours, theirs;\n \tchar *ref = NULL;\n \tstruct branch *branch = branch_get(branch_name);\n \tstruct strbuf fancy = STRBUF_INIT;\n \tint upstream_is_gone = 0;\n-\tint added_decoration = 1;\n \n-\tswitch (stat_tracking_info(branch, &ours, &theirs)) {\n-\tcase 0:\n-\t\t/* no base */\n+\tif (!branch)\n \t\treturn;\n-\tcase -1:\n-\t\t/* with \"gone\" base */\n-\t\tupstream_is_gone = 1;\n-\t\tbreak;\n-\tdefault:\n-\t\t/* with base */\n-\t\tbreak;\n+\n+\tif (show_tracking) {\n+\t\tswitch (stat_tracking_info(branch, &ours, &theirs)) {\n+\t\tcase 0:\n+\t\t\t/* no base */\n+\t\t\treturn;\n+\t\tcase -1:\n+\t\t\t/* with \"gone\" base */\n+\t\t\tupstream_is_gone = 1;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t/* with base */\n+\t\t\tbreak;\n+\t\t}\n+\t} else {\n+\t\tours = theirs = 0;\n \t}\n \n-\tif (show_upstream_ref) {\n+\tif (branch->merge && branch->merge[0] && branch->merge[0]->dst) {\n \t\tref = shorten_unambiguous_ref(branch->merge[0]->dst, 0);\n \t\tif (want_color(branch_use_color))\n \t\t\tstrbuf_addf(&fancy, \"%s%s%s\",\n@@ -448,39 +454,23 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n \t\telse\n \t\t\tstrbuf_addstr(&fancy, ref);\n \t}\n+\tif (!fancy.len)\n+\t\treturn;\n \n-\tif (upstream_is_gone) {\n-\t\tif (show_upstream_ref)\n-\t\t\tstrbuf_addf(stat, _(\"[%s: gone]\"), fancy.buf);\n-\t\telse\n-\t\t\tadded_decoration = 0;\n-\t} else if (!ours && !theirs) {\n-\t\tif (show_upstream_ref)\n-\t\t\tstrbuf_addf(stat, _(\"[%s]\"), fancy.buf);\n-\t\telse\n-\t\t\tadded_decoration = 0;\n-\t} else if (!ours) {\n-\t\tif (show_upstream_ref)\n-\t\t\tstrbuf_addf(stat, _(\"[%s: behind %d]\"), fancy.buf, theirs);\n-\t\telse\n-\t\t\tstrbuf_addf(stat, _(\"[behind %d]\"), theirs);\n+\tif (upstream_is_gone)\n+\t\tstrbuf_addf(stat, _(\"[%s: gone]\"), fancy.buf);\n+\telse if (!ours && !theirs)\n+\t\tstrbuf_addf(stat, _(\"[%s]\"), fancy.buf);\n+\telse if (!ours)\n+\t\tstrbuf_addf(stat, _(\"[%s: behind %d]\"), fancy.buf, theirs);\n+\telse if (!theirs)\n+\t\tstrbuf_addf(stat, _(\"[%s: ahead %d]\"), fancy.buf, ours);\n+\telse\n+\t\tstrbuf_addf(stat, _(\"[%s: ahead %d, behind %d]\"),\n+\t\t\t    fancy.buf, ours, theirs);\n \n-\t} else if (!theirs) {\n-\t\tif (show_upstream_ref)\n-\t\t\tstrbuf_addf(stat, _(\"[%s: ahead %d]\"), fancy.buf, ours);\n-\t\telse\n-\t\t\tstrbuf_addf(stat, _(\"[ahead %d]\"), ours);\n-\t} else {\n-\t\tif (show_upstream_ref)\n-\t\t\tstrbuf_addf(stat, _(\"[%s: ahead %d, behind %d]\"),\n-\t\t\t\t    fancy.buf, ours, theirs);\n-\t\telse\n-\t\t\tstrbuf_addf(stat, _(\"[ahead %d, behind %d]\"),\n-\t\t\t\t    ours, theirs);\n-\t}\n \tstrbuf_release(&fancy);\n-\tif (added_decoration)\n-\t\tstrbuf_addch(stat, ' ');\n+\tstrbuf_addch(stat, ' ');\n \tfree(ref);\n }\n \ndiff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh\nindex 7ac8fd0..af26db5 100755\n--- a/t/t6040-tracking-info.sh\n+++ b/t/t6040-tracking-info.sh\n@@ -41,12 +41,12 @@ test_expect_success setup '\n \n script='s/^..\\(b.\\) *[0-9a-f]* \\(.*\\)$/\\1 \\2/p'\n cat >expect <<\\EOF\n-b1 [ahead 1, behind 1] d\n-b2 [ahead 1, behind 1] d\n-b3 [behind 1] b\n-b4 [ahead 2] f\n-b5 g\n-b6 c\n+b1 [origin/master] d\n+b2 [origin/master] d\n+b3 [origin/master] b\n+b4 [origin/master] f\n+b5 [brokenbase] g\n+b6 [origin/master] c\n EOF\n \n test_expect_success 'branch -v' '\n-- \n1.9.1+fc3.9.gc73078e\n"}]}