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