Skip to content

Commit 2083912

Browse files
committed
Add support for new/removed binary files.
Add test cases.
1 parent 9bc7549 commit 2083912

4 files changed

+46
-2
lines changed

diff/diff_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,21 @@ func TestParseFileDiffHeaders(t *testing.T) {
135135
},
136136
},
137137
},
138+
{
139+
filename: "sample_file_extended_empty_new_binary.diff",
140+
wantDiff: &FileDiff{
141+
OrigName: "/dev/null",
142+
OrigTime: nil,
143+
NewName: "b/diff/binary-image.png",
144+
NewTime: nil,
145+
Extended: []string{
146+
"diff --git a/diff/binary-image.png b/diff/binary-image.png",
147+
"new file mode 100644",
148+
"index 0000000..b51756e",
149+
"Binary files /dev/null and b/diff/binary-image.png differ",
150+
},
151+
},
152+
},
138153
{
139154
filename: "sample_file_extended_empty_deleted.diff",
140155
wantDiff: &FileDiff{
@@ -149,6 +164,21 @@ func TestParseFileDiffHeaders(t *testing.T) {
149164
},
150165
},
151166
},
167+
{
168+
filename: "sample_file_extended_empty_deleted_binary.diff",
169+
wantDiff: &FileDiff{
170+
OrigName: "a/187/player/random/gopher-0.png",
171+
OrigTime: nil,
172+
NewName: "/dev/null",
173+
NewTime: nil,
174+
Extended: []string{
175+
"diff --git a/187/player/random/gopher-0.png b/187/player/random/gopher-0.png",
176+
"deleted file mode 100644",
177+
"index aebdfc7..0000000",
178+
"Binary files a/187/player/random/gopher-0.png and /dev/null differ",
179+
},
180+
},
181+
},
152182
{
153183
filename: "sample_file_extended_empty_rename.diff",
154184
wantDiff: &FileDiff{
@@ -365,7 +395,9 @@ func TestParseFileDiffAndPrintFileDiff(t *testing.T) {
365395
{filename: "sample_file_no_timestamp.diff"},
366396
{filename: "sample_file_extended.diff"},
367397
{filename: "sample_file_extended_empty_new.diff"},
398+
{filename: "sample_file_extended_empty_new_binary.diff"},
368399
{filename: "sample_file_extended_empty_deleted.diff"},
400+
{filename: "sample_file_extended_empty_deleted_binary.diff"},
369401
{filename: "sample_file_extended_empty_rename.diff"},
370402
{filename: "sample_file_extended_empty_binary.diff"},
371403
{

diff/parse.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,12 +329,16 @@ func (r *FileDiffReader) ReadExtendedHeaders() ([]string, error) {
329329
// that follow. It updates fd fields from the parsed extended headers.
330330
func handleEmpty(fd *FileDiff) (wasEmpty bool) {
331331
switch {
332-
case len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "new file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
332+
case (len(fd.Extended) == 3 || len(fd.Extended) == 4 && strings.HasPrefix(fd.Extended[3], "Binary files ")) &&
333+
strings.HasPrefix(fd.Extended[1], "new file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
334+
333335
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
334336
fd.OrigName = "/dev/null"
335337
fd.NewName = names[1]
336338
return true
337-
case len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "deleted file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
339+
case (len(fd.Extended) == 3 || len(fd.Extended) == 4 && strings.HasPrefix(fd.Extended[3], "Binary files ")) &&
340+
strings.HasPrefix(fd.Extended[1], "deleted file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
341+
338342
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
339343
fd.OrigName = names[0]
340344
fd.NewName = "/dev/null"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
diff --git a/187/player/random/gopher-0.png b/187/player/random/gopher-0.png
2+
deleted file mode 100644
3+
index aebdfc7..0000000
4+
Binary files a/187/player/random/gopher-0.png and /dev/null differ
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
diff --git a/diff/binary-image.png b/diff/binary-image.png
2+
new file mode 100644
3+
index 0000000..b51756e
4+
Binary files /dev/null and b/diff/binary-image.png differ

0 commit comments

Comments
 (0)