Commit 72806f4cca7602460d19fbee8be98449304e92a2

Edward Thomson 2015-09-23T13:56:48

patch: don't print some headers on pure renames

diff --git a/src/diff_print.c b/src/diff_print.c
index 59f751c..0253ca6 100644
--- a/src/diff_print.c
+++ b/src/diff_print.c
@@ -349,6 +349,8 @@ int git_diff_delta__format_file_header(
 	const char *newpfx,
 	int oid_strlen)
 {
+	bool skip_index;
+
 	if (!oldpfx)
 		oldpfx = DIFF_OLD_PREFIX_DEFAULT;
 	if (!newpfx)
@@ -364,11 +366,18 @@ int git_diff_delta__format_file_header(
 	if (delta->status == GIT_DELTA_RENAMED)
 		GITERR_CHECK_ERROR(diff_delta_format_rename_header(out, delta));
 
-	GITERR_CHECK_ERROR(diff_print_oid_range(out, delta, oid_strlen));
+	skip_index = (delta->status == GIT_DELTA_RENAMED &&
+		delta->similarity == 100 &&
+		delta->old_file.mode == 0 &&
+		delta->new_file.mode == 0);
+
+	if (!skip_index) {
+		GITERR_CHECK_ERROR(diff_print_oid_range(out, delta, oid_strlen));
 
-	if ((delta->flags & GIT_DIFF_FLAG_BINARY) == 0)
-		diff_delta_format_with_paths(
-			out, delta, oldpfx, newpfx, "--- %s%s\n+++ %s%s\n");
+		if ((delta->flags & GIT_DIFF_FLAG_BINARY) == 0)
+			diff_delta_format_with_paths(
+				out, delta, oldpfx, newpfx, "--- %s%s\n+++ %s%s\n");
+	}
 
 	return git_buf_oom(out) ? -1 : 0;
 }