diff options
author | Thomas Gummerer <t.gummerer@gmail.com> | 2019-07-11 17:08:50 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-11 14:29:27 -0700 |
commit | 444e0969baaf2f68691ac7b49d5413d5e0d8d1fb (patch) | |
tree | e9cbfc3fb1ba6187a6d66520e23cbfeee8b23647 | |
parent | range-diff: add section header instead of diff header (diff) | |
download | tgif-444e0969baaf2f68691ac7b49d5413d5e0d8d1fb.tar.xz |
range-diff: add filename to inner diff
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>
-rw-r--r-- | range-diff.c | 15 | ||||
-rwxr-xr-x | t/t3206-range-diff.sh | 16 |
2 files changed, 23 insertions, 8 deletions
diff --git a/range-diff.c b/range-diff.c index 5f64380fe4..7a96a587f1 100644 --- a/range-diff.c +++ b/range-diff.c @@ -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; diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh index c277756057..d4de270979 100755 --- a/t/t3206-range-diff.sh +++ b/t/t3206-range-diff.sh @@ -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> |