range-diff: add filename to inner diff
authorThomas Gummerer <t.gummerer@gmail.com>
Thu, 11 Jul 2019 16:08:50 +0000 (17:08 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 11 Jul 2019 21:29:27 +0000 (14:29 -0700)
In a range-diff it's not always clear which file a certain funcname of
the inner diff belongs to, because the diff header (or section header
as added in a previous commit) is not always visible in the
range-diff.

Add the filename to the inner diffs header, so it's always visible to
users.

This also allows us to add the filename + the funcname to the outer
diffs hunk headers using a custom userdiff pattern, which will be done
in the next commit.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
range-diff.c
t/t3206-range-diff.sh
index 5f64380fe4d0597ac271ab2ab38da26ee0841291..7a96a587f1f378ce25c2d1dc1491ec841e276e99 100644 (file)
@@ -46,7 +46,7 @@ static int read_patches(const char *range, struct string_list *list)
        struct strbuf buf = STRBUF_INIT, contents = STRBUF_INIT;
        struct patch_util *util = NULL;
        int in_header = 1;
-       char *line;
+       char *line, *current_filename = NULL;
        int offset, len;
        size_t size;
 
@@ -125,6 +125,12 @@ static int read_patches(const char *range, struct string_list *list)
                        else
                                strbuf_addstr(&buf, patch.new_name);
 
+                       free(current_filename);
+                       if (patch.is_delete > 0)
+                               current_filename = xstrdup(patch.old_name);
+                       else
+                               current_filename = xstrdup(patch.new_name);
+
                        if (patch.new_mode && patch.old_mode &&
                            patch.old_mode != patch.new_mode)
                                strbuf_addf(&buf, " (mode change %06o => %06o)",
@@ -145,7 +151,11 @@ static int read_patches(const char *range, struct string_list *list)
                        continue;
                } else if (skip_prefix(line, "@@ ", &p)) {
                        p = strstr(p, "@@");
-                       strbuf_addstr(&buf, p ? p : "@@");
+                       strbuf_addstr(&buf, "@@");
+                       if (current_filename && p[2])
+                               strbuf_addf(&buf, " %s:", current_filename);
+                       if (p)
+                               strbuf_addstr(&buf, p + 2);
                } else if (!line[0])
                        /*
                         * A completely blank (not ' \n', which is context)
@@ -177,6 +187,7 @@ static int read_patches(const char *range, struct string_list *list)
        if (util)
                string_list_append(list, buf.buf)->util = util;
        strbuf_release(&buf);
+       free(current_filename);
 
        if (finish_command(&cp))
                return -1;
index c2777560570bb73818d4b237a0a6d3eac377e90b..d4de270979ec8b7e9f6a1fd018c5297c82462e59 100755 (executable)
@@ -110,7 +110,7 @@ test_expect_success 'changed commit' '
              14
        4:  a63e992 ! 4:  d966c5c s/12/B/
            @@
-            @@ A
+            @@ file: A
              9
              10
            - B
@@ -169,7 +169,7 @@ test_expect_success 'changed commit with sm config' '
              14
        4:  a63e992 ! 4:  d966c5c s/12/B/
            @@
-            @@ A
+            @@ file: A
              9
              10
            - B
@@ -203,20 +203,24 @@ test_expect_success 'renamed file' '
            Z    s/11/B/
            Z
            - ## file ##
+           -@@ file: A
            + ## renamed-file ##
-           Z@@ A
+           +@@ renamed-file: A
            Z 8
            Z 9
+           Z 10
        4:  a63e992 ! 4:  1e6226b s/12/B/
            @@
            Z
            Z    s/12/B/
            Z
            - ## file ##
+           -@@ file: A
            + ## renamed-file ##
-           Z@@ A
+           +@@ renamed-file: A
            Z 9
            Z 10
+           Z B
        EOF
        test_cmp expected actual
 '
@@ -248,7 +252,7 @@ test_expect_success 'file added and later removed' '
            +    s/11/B/ + remove file
            Z
            Z ## file ##
-           Z@@ A
+           Z@@ file: A
            @@
            Z 12
            Z 13
@@ -310,7 +314,7 @@ test_expect_success 'dual-coloring' '
        :      14<RESET>
        :<RED>4:  d966c5c <RESET><YELLOW>!<RESET><GREEN> 4:  8add5f1<RESET><YELLOW> s/12/B/<RESET>
        :    <REVERSE><CYAN>@@<RESET>
-       :    <CYAN> @@ A<RESET>
+       :    <CYAN> @@ file: A<RESET>
        :      9<RESET>
        :      10<RESET>
        :    <REVERSE><RED>-<RESET><FAINT> BB<RESET>