]> git.ipfire.org Git - thirdparty/git.git/commitdiff
range-diff: left-pad patch numbers
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 13 Aug 2018 11:33:28 +0000 (04:33 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Aug 2018 17:44:52 +0000 (10:44 -0700)
As pointed out by Elijah Newren, tbdiff has this neat little alignment
trick where it outputs the commit pairs with patch numbers that are
padded to the maximal patch number's width:

  1: cafedead =   1: acefade first patch
[...]
314: beefeada < 314: facecab up to PI!

Let's do the same in range-diff, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
range-diff.c

index b1663da7cd30688f8fd4d7efa41efb16eb130e96..b6b9abac266f3a6a2abdfcdd815f80b7da930854 100644 (file)
@@ -259,6 +259,7 @@ static void get_correspondences(struct string_list *a, struct string_list *b,
 }
 
 static void output_pair_header(struct diff_options *diffopt,
+                              int patch_no_width,
                               struct strbuf *buf,
                               struct strbuf *dashes,
                               struct patch_util *a_util,
@@ -295,9 +296,9 @@ static void output_pair_header(struct diff_options *diffopt,
        strbuf_reset(buf);
        strbuf_addstr(buf, status == '!' ? color_old : color);
        if (!a_util)
-               strbuf_addf(buf, "-:  %s ", dashes->buf);
+               strbuf_addf(buf, "%*s:  %s ", patch_no_width, "-", dashes->buf);
        else
-               strbuf_addf(buf, "%d:  %s ", a_util->i + 1,
+               strbuf_addf(buf, "%*d:  %s ", patch_no_width, a_util->i + 1,
                            find_unique_abbrev(&a_util->oid, DEFAULT_ABBREV));
 
        if (status == '!')
@@ -307,9 +308,9 @@ static void output_pair_header(struct diff_options *diffopt,
                strbuf_addf(buf, "%s%s", color_reset, color_new);
 
        if (!b_util)
-               strbuf_addf(buf, " -:  %s", dashes->buf);
+               strbuf_addf(buf, " %*s:  %s", patch_no_width, "-", dashes->buf);
        else
-               strbuf_addf(buf, " %d:  %s", b_util->i + 1,
+               strbuf_addf(buf, " %*d:  %s", patch_no_width, b_util->i + 1,
                            find_unique_abbrev(&b_util->oid, DEFAULT_ABBREV));
 
        commit = lookup_commit_reference(the_repository, oid);
@@ -357,6 +358,7 @@ static void output(struct string_list *a, struct string_list *b,
                   struct diff_options *diffopt)
 {
        struct strbuf buf = STRBUF_INIT, dashes = STRBUF_INIT;
+       int patch_no_width = decimal_width(1 + (a->nr > b->nr ? a->nr : b->nr));
        int i = 0, j = 0;
 
        /*
@@ -378,7 +380,7 @@ static void output(struct string_list *a, struct string_list *b,
 
                /* Show unmatched LHS commit whose predecessors were shown. */
                if (i < a->nr && a_util->matching < 0) {
-                       output_pair_header(diffopt,
+                       output_pair_header(diffopt, patch_no_width,
                                           &buf, &dashes, a_util, NULL);
                        i++;
                        continue;
@@ -386,7 +388,7 @@ static void output(struct string_list *a, struct string_list *b,
 
                /* Show unmatched RHS commits. */
                while (j < b->nr && b_util->matching < 0) {
-                       output_pair_header(diffopt,
+                       output_pair_header(diffopt, patch_no_width,
                                           &buf, &dashes, NULL, b_util);
                        b_util = ++j < b->nr ? b->items[j].util : NULL;
                }
@@ -394,7 +396,7 @@ static void output(struct string_list *a, struct string_list *b,
                /* Show matching LHS/RHS pair. */
                if (j < b->nr) {
                        a_util = a->items[b_util->matching].util;
-                       output_pair_header(diffopt,
+                       output_pair_header(diffopt, patch_no_width,
                                           &buf, &dashes, a_util, b_util);
                        if (!(diffopt->output_format & DIFF_FORMAT_NO_OUTPUT))
                                patch_diff(a->items[b_util->matching].string,