Skip to content

Commit bcc6326

Browse files
committed
Clean up.
1 parent 5039278 commit bcc6326

File tree

6 files changed

+46
-72
lines changed

6 files changed

+46
-72
lines changed

diff/diff.pb.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

diff/diff.proto

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ message FileDiff {
3333

3434
// hunks that were changed from orig to new
3535
repeated Hunk Hunks = 6;
36-
37-
// TODO: Consider if this is neccessary.
38-
bool Empty = 7;
3936
}
4037

4138

diff/diff_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ func TestParseFileDiffHeaders(t *testing.T) {
133133
"new file mode 100644",
134134
"index 0000000..e69de29",
135135
},
136-
Empty: true,
137136
},
138137
},
139138
{
@@ -148,7 +147,6 @@ func TestParseFileDiffHeaders(t *testing.T) {
148147
"deleted file mode 100644",
149148
"index e69de29..0000000",
150149
},
151-
Empty: true,
152150
},
153151
},
154152
{
@@ -164,7 +162,6 @@ func TestParseFileDiffHeaders(t *testing.T) {
164162
"rename from docs/integrations/Email_Notifications.md",
165163
"rename to docs/integrations/email-notifications.md",
166164
},
167-
Empty: true,
168165
},
169166
},
170167
}
@@ -214,7 +211,6 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
214211
"new file mode 100644",
215212
"index 0000000..e69de29",
216213
},
217-
Empty: true,
218214
},
219215
{
220216
OrigName: "/dev/null",
@@ -253,7 +249,6 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
253249
"deleted file mode 100644",
254250
"index e69de29..0000000",
255251
},
256-
Empty: true,
257252
},
258253
{
259254
OrigName: "a/vendor/go/build/testdata/multi/file.go",
@@ -292,7 +287,6 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
292287
"rename from docs/integrations/Email_Notifications.md",
293288
"rename to docs/integrations/email-notifications.md",
294289
},
295-
Empty: true,
296290
},
297291
{
298292
OrigName: "a/release_notes.md",
@@ -329,7 +323,6 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
329323
"index 17a971d..599f8dd 100644",
330324
"Binary files a/data/Font.png and b/data/Font.png differ",
331325
},
332-
Empty: true,
333326
},
334327
{
335328
OrigName: "a/main.go",

diff/parse.go

Lines changed: 37 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -177,59 +177,16 @@ func (r *FileDiffReader) ReadAllHeaders() (*FileDiff, error) {
177177
fd := &FileDiff{}
178178

179179
fd.Extended, err = r.ReadExtendedHeaders()
180-
if err, ok := err.(*ParseError); ok && err.Err == ErrExtendedHeadersEOF {
181-
// TODO: Clean up.
182-
if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "new file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
183-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
184-
fd.OrigName = "/dev/null"
185-
fd.NewName = names[1]
186-
fd.Empty = true
187-
return fd, nil
188-
} else if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "deleted file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
189-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
190-
fd.OrigName = names[0]
191-
fd.NewName = "/dev/null"
192-
fd.Empty = true
193-
return fd, nil
194-
} else if len(fd.Extended) == 4 && strings.HasPrefix(fd.Extended[2], "rename from ") && strings.HasPrefix(fd.Extended[3], "rename to ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
195-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
196-
fd.OrigName = names[0]
197-
fd.NewName = names[1]
198-
fd.Empty = true
199-
return fd, nil
200-
} else if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[2], "Binary files ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
201-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
202-
fd.OrigName = names[0]
203-
fd.NewName = names[1]
204-
fd.Empty = true
180+
if pe, ok := err.(*ParseError); ok && pe.Err == ErrExtendedHeadersEOF {
181+
wasEmpty := handleEmpty(fd)
182+
if wasEmpty {
205183
return fd, nil
206184
}
207-
}
208-
if _, ok := err.(OverflowError); ok {
209-
// TODO: Clean up, deduplicate.
210-
if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "new file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
211-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
212-
fd.OrigName = "/dev/null"
213-
fd.NewName = names[1]
214-
fd.Empty = true
215-
} else if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "deleted file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
216-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
217-
fd.OrigName = names[0]
218-
fd.NewName = "/dev/null"
219-
fd.Empty = true
220-
} else if len(fd.Extended) == 4 && strings.HasPrefix(fd.Extended[2], "rename from ") && strings.HasPrefix(fd.Extended[3], "rename to ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
221-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
222-
fd.OrigName = names[0]
223-
fd.NewName = names[1]
224-
fd.Empty = true
225-
} else if len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[2], "Binary files ") && strings.HasPrefix(fd.Extended[0], "diff --git ") {
226-
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
227-
fd.OrigName = names[0]
228-
fd.NewName = names[1]
229-
fd.Empty = true
230-
}
231-
}
232-
if err != nil {
185+
return fd, err
186+
} else if _, ok := err.(OverflowError); ok {
187+
handleEmpty(fd)
188+
return fd, err
189+
} else if err != nil {
233190
return fd, err
234191
}
235192

@@ -368,6 +325,35 @@ func (r *FileDiffReader) ReadExtendedHeaders() ([]string, error) {
368325
}
369326
}
370327

328+
// handleEmpty detects when FileDiff was an empty diff and will not have any hunks
329+
// that follow. It updates fd fields from the parsed extended headers.
330+
func handleEmpty(fd *FileDiff) (wasEmpty bool) {
331+
switch {
332+
case len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "new file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
333+
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
334+
fd.OrigName = "/dev/null"
335+
fd.NewName = names[1]
336+
return true
337+
case len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[1], "deleted file mode ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
338+
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
339+
fd.OrigName = names[0]
340+
fd.NewName = "/dev/null"
341+
return true
342+
case len(fd.Extended) == 4 && strings.HasPrefix(fd.Extended[2], "rename from ") && strings.HasPrefix(fd.Extended[3], "rename to ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
343+
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
344+
fd.OrigName = names[0]
345+
fd.NewName = names[1]
346+
return true
347+
case len(fd.Extended) == 3 && strings.HasPrefix(fd.Extended[2], "Binary files ") && strings.HasPrefix(fd.Extended[0], "diff --git "):
348+
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
349+
fd.OrigName = names[0]
350+
fd.NewName = names[1]
351+
return true
352+
default:
353+
return false
354+
}
355+
}
356+
371357
var (
372358
// ErrNoFileHeader is when a file unified diff has no file header
373359
// (i.e., the lines that begin with "---" and "+++").

diff/print.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ func PrintFileDiff(d *FileDiff) ([]byte, error) {
3636
}
3737
}
3838

39-
if !d.Empty && (d.OrigName != "" || d.OrigTime != nil || d.NewName != "" || d.NewTime != nil) {
40-
if err := printFileHeader(&buf, "--- ", d.OrigName, timePtr(d.OrigTime)); err != nil {
41-
return nil, err
42-
}
43-
if err := printFileHeader(&buf, "+++ ", d.NewName, timePtr(d.NewTime)); err != nil {
44-
return nil, err
45-
}
39+
if d.Hunks == nil {
40+
return buf.Bytes(), nil
41+
}
42+
43+
if err := printFileHeader(&buf, "--- ", d.OrigName, timePtr(d.OrigTime)); err != nil {
44+
return nil, err
45+
}
46+
if err := printFileHeader(&buf, "+++ ", d.NewName, timePtr(d.NewTime)); err != nil {
47+
return nil, err
4648
}
4749

4850
ph, err := PrintHunks(d.Hunks)

diff/testdata/empty_multi.diff

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
diff --git Godeps/_workspace/src/sourcegraph.com/sourcegraph/go-diff/diff/testdata/empty.diff Godeps/_workspace/src/sourcegraph.com/sourcegraph/go-diff/diff/testdata/empty.diff
22
new file mode 100644
33
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
4-
--- /dev/null
5-
+++ Godeps/_workspace/src/sourcegraph.com/sourcegraph/go-diff/diff/testdata/empty.diff
64
diff --git Godeps/_workspace/src/sourcegraph.com/sourcegraph/go-diff/diff/testdata/empty_new.diff Godeps/_workspace/src/sourcegraph.com/sourcegraph/go-diff/diff/testdata/empty_new.diff
75
new file mode 100644
86
index 0000000000000000000000000000000000000000..527e2e70f57b02e709f53e3ac2b7f59e2b5a46bc

0 commit comments

Comments
 (0)