Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH] branch: fix --verbose output column alignment

From: Jiang Xin <hidden>
Date: 2016-06-15 22:59:15

2013/11/15 Torstein Hegge [off-list ref]:
Commit f2e0873 (branch: report invalid tracking branch as gone) removed
an early return from fill_tracking_info() in the path taken when 'git
branch -v' lists a branch in sync with its upstream. This resulted in an
unconditionally added space in front of the subject line:

    $ git branch -v
    * master f5eb3da  commit pushed to upstream
      topic  f935eb6 unpublished topic
Thank you for catching this. Confirmed that the output of "git branch -v"
is not aligned well. This example may be more clear ;-)

    $ git branch -v
     branch1    f0ec0da [ahead 1, behind 2] divert from upstream
     branch2    f5eb3da  commit pushed to upstream
     branch3    f935eb6 unpublished topic
quoted hunk ↗ jump to hunk
Instead, only add the trailing space if a decoration have been added.

To catch this kind of whitespace breakage in the tests, be a bit less
smart when filtering the output through sed.

Signed-off-by: Torstein Hegge <redacted>
---
 builtin/branch.c         |  8 +++++++-
 t/t6040-tracking-info.sh | 24 +++++++++++++-----------
 2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 0bb0e93..636a16e 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -424,6 +424,7 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
        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:
@@ -451,9 +452,13 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
        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);
@@ -474,7 +479,8 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
                                    ours, theirs);
        }
        strbuf_release(&fancy);
-       strbuf_addch(stat, ' ');
+       if (added_decoration)
+               strbuf_addch(stat, ' ');
        free(ref);
 }
How about add "strbuf_addch(stat, ' ');" to each condition directly,  like this:


        if (upstream_is_gone) {
                if (show_upstream_ref) {
                        strbuf_addf(stat, _("[%s: gone]"), fancy.buf);
                        strbuf_addch(stat, ' ');
                }
        } else if (!ours && !theirs) {
                if (show_upstream_ref) {
                        strbuf_addf(stat, _("[%s]"), fancy.buf);
                        strbuf_addch(stat, ' ');
                }
        } else if (!ours) {
                if (show_upstream_ref)
                        strbuf_addf(stat, _("[%s: behind %d]"),
fancy.buf, theirs);
                else
                        strbuf_addf(stat, _("[behind %d]"), theirs);
                strbuf_addch(stat, ' ');
        } else if (!theirs) {
                if (show_upstream_ref)
                        strbuf_addf(stat, _("[%s: ahead %d]"), fancy.buf, ours);
                else
                        strbuf_addf(stat, _("[ahead %d]"), ours);
                strbuf_addch(stat, ' ');
        } 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_addch(stat, ' ');
        }
        strbuf_release(&fancy);
        free(ref);


-- 
Jiang Xin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help