diff --git a/diff/diff_test.go b/diff/diff_test.go index dd5eb51..11c7b01 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -271,6 +271,22 @@ func TestParseFileDiffHeaders(t *testing.T) { }, }, }, + { + filename: "sample_file_extended_binary_rename_no_index.diff", + wantDiff: &FileDiff{ + OrigName: "a/data/foo.txt", + OrigTime: nil, + NewName: "b/data/bar.txt", + NewTime: nil, + Extended: []string{ + "diff --git a/data/foo.txt b/data/bar.txt", + "similarity index 100%", + "rename from data/foo.txt", + "rename to data/bar.txt", + "Binary files a/data/foo.txt and b/data/bar.txt differ", + }, + }, + }, } for _, test := range tests { t.Run(test.filename, func(t *testing.T) { diff --git a/diff/parse.go b/diff/parse.go index ae2ede4..4a0b823 100644 --- a/diff/parse.go +++ b/diff/parse.go @@ -489,6 +489,7 @@ func handleEmpty(fd *FileDiff) (wasEmpty bool) { (lineCount == 6 && linesHavePrefixes(1, "old mode ", 2, "new mode ") && linesHavePrefixes(4, "copy from ", 5, "copy to ")) isRename := (lineCount == 4 && linesHavePrefixes(2, "rename from ", 3, "rename to ")) || + (lineCount == 5 && linesHavePrefixes(2, "rename from ", 3, "rename to ") && lineHasPrefix(4, "Binary files ")) || (lineCount == 6 && linesHavePrefixes(2, "rename from ", 3, "rename to ") && lineHasPrefix(5, "Binary files ")) || (lineCount == 6 && linesHavePrefixes(1, "old mode ", 2, "new mode ") && linesHavePrefixes(4, "rename from ", 5, "rename to ")) diff --git a/diff/testdata/sample_file_extended_binary_rename_no_index.diff b/diff/testdata/sample_file_extended_binary_rename_no_index.diff new file mode 100644 index 0000000..98c9d89 --- /dev/null +++ b/diff/testdata/sample_file_extended_binary_rename_no_index.diff @@ -0,0 +1,5 @@ +diff --git a/data/foo.txt b/data/bar.txt +similarity index 100% +rename from data/foo.txt +rename to data/bar.txt +Binary files a/data/foo.txt and b/data/bar.txt differ