Skip to content

Commit 30d005c

Browse files
peffgitster
authored andcommitted
diff: use blob path for blob/file diffs
When we diff a blob against a working tree file like: git diff HEAD:Makefile Makefile we always use the working tree filename for both sides of the diff. In most cases that's fine, as the two would be the same anyway, as above. And until recently, we used the "name" for the blob, not the path, which would have the messy "HEAD:" on the beginning. But when they don't match, like: git diff HEAD:old_path new_path it makes sense to show both names. This patch uses the blob's path field if it's available, and otherwise falls back to using the filename (in preference to the blob's name, which is likely to be garbage like a raw sha1). Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 158b06c commit 30d005c

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

builtin/diff.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ static int builtin_diff_b_f(struct rev_info *revs,
9090
blob[0]->mode, canon_mode(st.st_mode),
9191
&blob[0]->item->oid, &null_oid,
9292
1, 0,
93-
path, path);
93+
blob[0]->path ? blob[0]->path : path,
94+
path);
9495
diffcore_std(&revs->diffopt);
9596
diff_flush(&revs->diffopt);
9697
return 0;

t/t4063-diff-blobs.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,16 @@ test_expect_success 'diff blob against file' '
8181
test_expect_success 'index of blob-file diff' '
8282
check_index $sha1_one $sha1_two
8383
'
84-
test_expect_failure 'blob-file diff uses filename as paths' '
84+
test_expect_success 'blob-file diff uses filename as paths' '
8585
check_paths one two
8686
'
8787
test_expect_success FILEMODE 'blob-file diff shows mode change' '
8888
check_mode 100644 100755
8989
'
9090

91+
test_expect_success 'blob-file diff prefers filename to sha1' '
92+
run_diff $sha1_one two &&
93+
check_paths two two
94+
'
95+
9196
test_done

0 commit comments

Comments
 (0)