summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Thomas Gummerer <t.gummerer@gmail.com>2019-07-11 17:08:50 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-07-11 14:29:27 -0700
commit444e0969baaf2f68691ac7b49d5413d5e0d8d1fb (patch)
treee9cbfc3fb1ba6187a6d66520e23cbfeee8b23647
parentrange-diff: add section header instead of diff header (diff)
downloadtgif-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.c15
-rwxr-xr-xt/t3206-range-diff.sh16
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>