{"thread":{"id":"35338","subject":"[PATCH] branch: fix --verbose output column alignment","startedAt":"2013-11-14T18:18:01Z","lastAt":"2013-11-18T19:27:15Z","messageCount":3,"participants":["Torstein Hegge","Jiang Xin","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"230633","messageId":"1384453081-7679-1-git-send-email-hegge@resisty.net","threadId":"35338","inReplyTo":null,"subject":"[PATCH] branch: fix --verbose output column alignment","fromName":"Torstein Hegge","fromEmail":"hegge@resisty.net","sentAt":"2013-11-14T18:18:01Z","receivedAt":"2013-11-14T18:18:01Z","isPatch":true,"sender":{"key":"hegge@resisty.net","avatar":"https://avatars.githubusercontent.com/u/26041?v=4"},"body":"Commit f2e0873 (branch: report invalid tracking branch as gone) removed\nan early return from fill_tracking_info() in the path taken when 'git\nbranch -v' lists a branch in sync with its upstream. This resulted in an\nunconditionally added space in front of the subject line:\n\n    $ git branch -v\n    * master f5eb3da  commit pushed to upstream\n      topic  f935eb6 unpublished topic\n\nInstead, only add the trailing space if a decoration have been added.\n\nTo catch this kind of whitespace breakage in the tests, be a bit less\nsmart when filtering the output through sed.\n\nSigned-off-by: Torstein Hegge <hegge@resisty.net>\n---\n builtin/branch.c         |  8 +++++++-\n t/t6040-tracking-info.sh | 24 +++++++++++++-----------\n 2 files changed, 20 insertions(+), 12 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 0bb0e93..636a16e 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -424,6 +424,7 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\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@@ -451,9 +452,13 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\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@@ -474,7 +479,8 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n \t\t\t\t    ours, theirs);\n \t}\n \tstrbuf_release(&fancy);\n-\tstrbuf_addch(stat, ' ');\n+\tif (added_decoration)\n+\t\tstrbuf_addch(stat, ' ');\n \tfree(ref);\n }\n \ndiff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh\nindex ba26cfe..7ac8fd0 100755\n--- a/t/t6040-tracking-info.sh\n+++ b/t/t6040-tracking-info.sh\n@@ -39,12 +39,14 @@ test_expect_success setup '\n \tadvance h\n '\n \n-script='s/^..\\(b.\\)[\t 0-9a-f]*\\[\\([^]]*\\)\\].*/\\1 \\2/p'\n+script='s/^..\\(b.\\) *[0-9a-f]* \\(.*\\)$/\\1 \\2/p'\n cat >expect <<\\EOF\n-b1 ahead 1, behind 1\n-b2 ahead 1, behind 1\n-b3 behind 1\n-b4 ahead 2\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 EOF\n \n test_expect_success 'branch -v' '\n@@ -57,12 +59,12 @@ test_expect_success 'branch -v' '\n '\n \n cat >expect <<\\EOF\n-b1 origin/master: ahead 1, behind 1\n-b2 origin/master: ahead 1, behind 1\n-b3 origin/master: behind 1\n-b4 origin/master: ahead 2\n-b5 brokenbase: gone\n-b6 origin/master\n+b1 [origin/master: ahead 1, behind 1] d\n+b2 [origin/master: ahead 1, behind 1] d\n+b3 [origin/master: behind 1] b\n+b4 [origin/master: ahead 2] f\n+b5 [brokenbase: gone] g\n+b6 [origin/master] c\n EOF\n \n test_expect_success 'branch -vv' '\n-- \n1.8.5.rc0.216.ge00de29\n"},{"id":"230660","messageId":"CANYiYbGPo4jZ5HShivK3Qk58pBaZAEnr71AML+9K4_Yzzkm+qQ@mail.gmail.com","threadId":"35338","inReplyTo":"1384453081-7679-1-git-send-email-hegge@resisty.net","subject":"Re: [PATCH] branch: fix --verbose output column alignment","fromName":"Jiang Xin","fromEmail":"worldhello.net@gmail.com","sentAt":"2013-11-15T01:45:16Z","receivedAt":"2013-11-15T01:45:16Z","isPatch":true,"sender":{"key":"worldhello.net@gmail.com","avatar":"https://avatars.githubusercontent.com/u/183860?v=4"},"body":"2013/11/15 Torstein Hegge <hegge@resisty.net>:\n> Commit f2e0873 (branch: report invalid tracking branch as gone) removed\n> an early return from fill_tracking_info() in the path taken when 'git\n> branch -v' lists a branch in sync with its upstream. This resulted in an\n> unconditionally added space in front of the subject line:\n>\n>     $ git branch -v\n>     * master f5eb3da  commit pushed to upstream\n>       topic  f935eb6 unpublished topic\n\nThank you for catching this. Confirmed that the output of \"git branch -v\"\nis not aligned well. This example may be more clear ;-)\n\n    $ git branch -v\n     branch1    f0ec0da [ahead 1, behind 2] divert from upstream\n     branch2    f5eb3da  commit pushed to upstream\n     branch3    f935eb6 unpublished topic\n\n>\n> Instead, only add the trailing space if a decoration have been added.\n>\n> To catch this kind of whitespace breakage in the tests, be a bit less\n> smart when filtering the output through sed.\n>\n> Signed-off-by: Torstein Hegge <hegge@resisty.net>\n> ---\n>  builtin/branch.c         |  8 +++++++-\n>  t/t6040-tracking-info.sh | 24 +++++++++++++-----------\n>  2 files changed, 20 insertions(+), 12 deletions(-)\n>\n> diff --git a/builtin/branch.c b/builtin/branch.c\n> index 0bb0e93..636a16e 100644\n> --- a/builtin/branch.c\n> +++ b/builtin/branch.c\n> @@ -424,6 +424,7 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n>         struct branch *branch = branch_get(branch_name);\n>         struct strbuf fancy = STRBUF_INIT;\n>         int upstream_is_gone = 0;\n> +       int added_decoration = 1;\n>\n>         switch (stat_tracking_info(branch, &ours, &theirs)) {\n>         case 0:\n> @@ -451,9 +452,13 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n>         if (upstream_is_gone) {\n>                 if (show_upstream_ref)\n>                         strbuf_addf(stat, _(\"[%s: gone]\"), fancy.buf);\n> +               else\n> +                       added_decoration = 0;\n>         } else if (!ours && !theirs) {\n>                 if (show_upstream_ref)\n>                         strbuf_addf(stat, _(\"[%s]\"), fancy.buf);\n> +               else\n> +                       added_decoration = 0;\n>         } else if (!ours) {\n>                 if (show_upstream_ref)\n>                         strbuf_addf(stat, _(\"[%s: behind %d]\"), fancy.buf, theirs);\n> @@ -474,7 +479,8 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,\n>                                     ours, theirs);\n>         }\n>         strbuf_release(&fancy);\n> -       strbuf_addch(stat, ' ');\n> +       if (added_decoration)\n> +               strbuf_addch(stat, ' ');\n>         free(ref);\n>  }\n>\n\nHow about add \"strbuf_addch(stat, ' ');\" to each condition directly,  like this:\n\n\n        if (upstream_is_gone) {\n                if (show_upstream_ref) {\n                        strbuf_addf(stat, _(\"[%s: gone]\"), fancy.buf);\n                        strbuf_addch(stat, ' ');\n                }\n        } else if (!ours && !theirs) {\n                if (show_upstream_ref) {\n                        strbuf_addf(stat, _(\"[%s]\"), fancy.buf);\n                        strbuf_addch(stat, ' ');\n                }\n        } else if (!ours) {\n                if (show_upstream_ref)\n                        strbuf_addf(stat, _(\"[%s: behind %d]\"),\nfancy.buf, theirs);\n                else\n                        strbuf_addf(stat, _(\"[behind %d]\"), theirs);\n                strbuf_addch(stat, ' ');\n        } else if (!theirs) {\n                if (show_upstream_ref)\n                        strbuf_addf(stat, _(\"[%s: ahead %d]\"), fancy.buf, ours);\n                else\n                        strbuf_addf(stat, _(\"[ahead %d]\"), ours);\n                strbuf_addch(stat, ' ');\n        } else {\n                if (show_upstream_ref)\n                        strbuf_addf(stat, _(\"[%s: ahead %d, behind %d]\"),\n                                    fancy.buf, ours, theirs);\n                else\n                        strbuf_addf(stat, _(\"[ahead %d, behind %d]\"),\n                                    ours, theirs);\n                strbuf_addch(stat, ' ');\n        }\n        strbuf_release(&fancy);\n        free(ref);\n\n\n-- \nJiang Xin\n"},{"id":"230776","messageId":"xmqqeh6dbje4.fsf@gitster.dls.corp.google.com","threadId":"35338","inReplyTo":"1384453081-7679-1-git-send-email-hegge@resisty.net","subject":"Re: [PATCH] branch: fix --verbose output column alignment","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-11-18T19:27:15Z","receivedAt":"2013-11-18T19:27:15Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Torstein Hegge <hegge@resisty.net> writes:\n\n> Commit f2e0873 (branch: report invalid tracking branch as gone) removed\n> an early return from fill_tracking_info() in the path taken when 'git\n> branch -v' lists a branch in sync with its upstream. This resulted in an\n> unconditionally added space in front of the subject line:\n>\n>     $ git branch -v\n>     * master f5eb3da  commit pushed to upstream\n>       topic  f935eb6 unpublished topic\n>\n> Instead, only add the trailing space if a decoration have been added.\n>\n> To catch this kind of whitespace breakage in the tests, be a bit less\n> smart when filtering the output through sed.\n>\n> Signed-off-by: Torstein Hegge <hegge@resisty.net>\n> ---\n\nThanks.\n"}]}