]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ab/range-diff-no-patch'
authorJunio C Hamano <gitster@pobox.com>
Sun, 18 Nov 2018 09:23:54 +0000 (18:23 +0900)
committerJunio C Hamano <gitster@pobox.com>
Sun, 18 Nov 2018 09:23:54 +0000 (18:23 +0900)
The "--no-patch" option, which can be used to get a high-level
overview without the actual line-by-line patch difference shown, of
the "range-diff" command was earlier broken, which has been
corrected.

* ab/range-diff-no-patch:
  range-diff: make diff option behavior (e.g. --stat) consistent
  range-diff: fix regression in passing along diff options
  range-diff doc: add a section about output stability

1  2 
range-diff.c
t/t3206-range-diff.sh

diff --combined range-diff.c
index 3958720f004ebe9ba027cd6097a7cd3ce41e3d73,014112ee401fda47c9f200393c44c372b010fcf4..767af8c5bb5617016ba2c341334c05696fdcbcc1
@@@ -38,14 -38,6 +38,14 @@@ static int read_patches(const char *ran
  
        argv_array_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges",
                        "--reverse", "--date-order", "--decorate=no",
 +                      /*
 +                       * Choose indicators that are not used anywhere
 +                       * else in diffs, but still look reasonable
 +                       * (e.g. will not be confusing when debugging)
 +                       */
 +                      "--output-indicator-new=>",
 +                      "--output-indicator-old=<",
 +                      "--output-indicator-context=#",
                        "--no-abbrev-commit", range,
                        NULL);
        cp.out = -1;
@@@ -90,7 -82,6 +90,7 @@@
                        strbuf_addch(&buf, '\n');
                        if (!util->diff_offset)
                                util->diff_offset = buf.len;
 +                      strbuf_addch(&buf, ' ');
                        strbuf_addbuf(&buf, &line);
                } else if (in_header) {
                        if (starts_with(line.buf, "Author: ")) {
                         * we are not interested.
                         */
                        continue;
 -              else
 +              else if (line.buf[0] == '>') {
 +                      strbuf_addch(&buf, '+');
 +                      strbuf_add(&buf, line.buf + 1, line.len - 1);
 +              } else if (line.buf[0] == '<') {
 +                      strbuf_addch(&buf, '-');
 +                      strbuf_add(&buf, line.buf + 1, line.len - 1);
 +              } else if (line.buf[0] == '#') {
 +                      strbuf_addch(&buf, ' ');
 +                      strbuf_add(&buf, line.buf + 1, line.len - 1);
 +              } else {
 +                      strbuf_addch(&buf, ' ');
                        strbuf_addbuf(&buf, &line);
 +              }
  
                strbuf_addch(&buf, '\n');
                util->diffsize++;
@@@ -197,12 -177,6 +197,12 @@@ static void diffsize_consume(void *data
        (*(int *)data)++;
  }
  
 +static void diffsize_hunk(void *data, long ob, long on, long nb, long nn,
 +                        const char *funcline, long funclen)
 +{
 +      diffsize_consume(data, NULL, 0);
 +}
 +
  static int diffsize(const char *a, const char *b)
  {
        xpparam_t pp = { 0 };
        mf2.size = strlen(b);
  
        cfg.ctxlen = 3;
 -      if (!xdi_diff_outf(&mf1, &mf2, diffsize_consume, &count, &pp, &cfg))
 +      if (!xdi_diff_outf(&mf1, &mf2,
 +                         diffsize_hunk, diffsize_consume, &count,
 +                         &pp, &cfg))
                return count;
  
        error(_("failed to generate diff"));
@@@ -362,7 -334,7 +362,7 @@@ static struct diff_filespec *get_filesp
  {
        struct diff_filespec *spec = alloc_filespec(name);
  
 -      fill_filespec(spec, &null_oid, 0, 0644);
 +      fill_filespec(spec, &null_oid, 0, 0100644);
        spec->data = (char *)p;
        spec->size = strlen(p);
        spec->should_munmap = 0;
@@@ -461,7 -433,8 +461,8 @@@ int show_range_diff(const char *range1
                struct strbuf indent = STRBUF_INIT;
  
                memcpy(&opts, diffopt, sizeof(opts));
-               opts.output_format = DIFF_FORMAT_PATCH;
+               if (!opts.output_format)
+                       opts.output_format = DIFF_FORMAT_PATCH;
                opts.flags.suppress_diff_headers = 1;
                opts.flags.dual_color_diffed_diffs = dual_color;
                opts.output_prefix = output_prefix_cb;
diff --combined t/t3206-range-diff.sh
index 6aae36417122a8af5d010910fb2586aa9ec91815,097ce34f849e594d8bb25e89047837f5157e8174..e497c1358f8b2da6960d3d73db3cc75f9f7df85c
@@@ -122,40 -122,36 +122,70 @@@ test_expect_success 'changed commit' 
        test_cmp expected actual
  '
  
+ test_expect_success 'changed commit with --no-patch diff option' '
+       git range-diff --no-color --no-patch topic...changed >actual &&
+       cat >expected <<-EOF &&
+       1:  4de457d = 1:  a4b3333 s/5/A/
+       2:  fccce22 = 2:  f51d370 s/4/A/
+       3:  147e64e ! 3:  0559556 s/11/B/
+       4:  a63e992 ! 4:  d966c5c s/12/B/
+       EOF
+       test_cmp expected actual
+ '
+ test_expect_success 'changed commit with --stat diff option' '
+       git range-diff --no-color --stat topic...changed >actual &&
+       cat >expected <<-EOF &&
+       1:  4de457d = 1:  a4b3333 s/5/A/
+            a => b | 0
+            1 file changed, 0 insertions(+), 0 deletions(-)
+       2:  fccce22 = 2:  f51d370 s/4/A/
+            a => b | 0
+            1 file changed, 0 insertions(+), 0 deletions(-)
+       3:  147e64e ! 3:  0559556 s/11/B/
+            a => b | 0
+            1 file changed, 0 insertions(+), 0 deletions(-)
+       4:  a63e992 ! 4:  d966c5c s/12/B/
+            a => b | 0
+            1 file changed, 0 insertions(+), 0 deletions(-)
+       EOF
+       test_cmp expected actual
+ '
 +test_expect_success 'changed commit with sm config' '
 +      git range-diff --no-color --submodule=log topic...changed >actual &&
 +      cat >expected <<-EOF &&
 +      1:  4de457d = 1:  a4b3333 s/5/A/
 +      2:  fccce22 = 2:  f51d370 s/4/A/
 +      3:  147e64e ! 3:  0559556 s/11/B/
 +          @@ -10,7 +10,7 @@
 +            9
 +            10
 +           -11
 +          -+B
 +          ++BB
 +            12
 +            13
 +            14
 +      4:  a63e992 ! 4:  d966c5c s/12/B/
 +          @@ -8,7 +8,7 @@
 +           @@
 +            9
 +            10
 +          - B
 +          + BB
 +           -12
 +           +B
 +            13
 +      EOF
 +      test_cmp expected actual
 +'
 +
 +test_expect_success 'no commits on one side' '
 +      git commit --amend -m "new message" &&
 +      git range-diff master HEAD@{1} HEAD
 +'
 +
  test_expect_success 'changed message' '
        git range-diff --no-color topic...changed-message >actual &&
        sed s/Z/\ /g >expected <<-EOF &&
            Z
            +    Also a silly comment here!
            +
 -          Zdiff --git a/file b/file
 -          Z--- a/file
 -          Z+++ b/file
 +          Z diff --git a/file b/file
 +          Z --- a/file
 +          Z +++ b/file
        3:  147e64e = 3:  b9cb956 s/11/B/
        4:  a63e992 = 4:  8add5f1 s/12/B/
        EOF
        test_cmp expected actual
  '
  
 +test_expect_success 'dual-coloring' '
 +      sed -e "s|^:||" >expect <<-\EOF &&
 +      :<YELLOW>1:  a4b3333 = 1:  f686024 s/5/A/<RESET>
 +      :<RED>2:  f51d370 <RESET><YELLOW>!<RESET><GREEN> 2:  4ab067d<RESET><YELLOW> s/4/A/<RESET>
 +      :    <REVERSE><CYAN>@@ -2,6 +2,8 @@<RESET>
 +      :     <RESET>
 +      :         s/4/A/<RESET>
 +      :     <RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD>    Also a silly comment here!<RESET>
 +      :    <REVERSE><GREEN>+<RESET>
 +      :      diff --git a/file b/file<RESET>
 +      :      --- a/file<RESET>
 +      :      +++ b/file<RESET>
 +      :<RED>3:  0559556 <RESET><YELLOW>!<RESET><GREEN> 3:  b9cb956<RESET><YELLOW> s/11/B/<RESET>
 +      :    <REVERSE><CYAN>@@ -10,7 +10,7 @@<RESET>
 +      :      9<RESET>
 +      :      10<RESET>
 +      :    <RED> -11<RESET>
 +      :    <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET>
 +      :      12<RESET>
 +      :      13<RESET>
 +      :      14<RESET>
 +      :<RED>4:  d966c5c <RESET><YELLOW>!<RESET><GREEN> 4:  8add5f1<RESET><YELLOW> s/12/B/<RESET>
 +      :    <REVERSE><CYAN>@@ -8,7 +8,7 @@<RESET>
 +      :    <CYAN> @@<RESET>
 +      :      9<RESET>
 +      :      10<RESET>
 +      :    <REVERSE><RED>-<RESET><FAINT> BB<RESET>
 +      :    <REVERSE><GREEN>+<RESET><BOLD> B<RESET>
 +      :    <RED> -12<RESET>
 +      :    <GREEN> +B<RESET>
 +      :      13<RESET>
 +      EOF
 +      git range-diff changed...changed-message --color --dual-color >actual.raw &&
 +      test_decode_color >actual <actual.raw &&
 +      test_cmp expect actual
 +'
 +
  for prev in topic master..topic
  do
        test_expect_success "format-patch --range-diff=$prev" '
        '
  done
  
 +test_expect_success 'format-patch --range-diff as commentary' '
 +      git format-patch --stdout --range-diff=HEAD~1 HEAD~1 >actual &&
 +      test_i18ngrep "^Range-diff:$" actual
 +'
 +
  test_done