Skip to content

Commit 7cb6842

Browse files
committed
Merge pull request #9 from sourcegraph/tmpl-debt
patch: Fixed a bug where file diffs for renamed files were not picked up
2 parents 0586387 + 9df7c6f commit 7cb6842

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

diff/parse.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,19 @@ func (r *MultiFileDiffReader) ReadFile() (*FileDiff, error) {
5555

5656
d, err := fr.ReadAllHeaders()
5757
if err != nil {
58-
if e0, ok := err.(*ParseError); ok {
59-
if e0.Err == ErrNoFileHeader || e0.Err == ErrExtendedHeadersEOF {
58+
switch e := err.(type) {
59+
case *ParseError:
60+
if e.Err == ErrNoFileHeader || e.Err == ErrExtendedHeadersEOF {
6061
return nil, io.EOF
6162
}
63+
64+
case OverflowError:
65+
r.nextFileFirstLine = []byte(e)
66+
return d, nil
67+
68+
default:
69+
return nil, err
6270
}
63-
return nil, err
6471
}
6572

6673
// Before reading hunks, check to see if there are any. If there
@@ -171,7 +178,7 @@ func (r *FileDiffReader) ReadAllHeaders() (*FileDiff, error) {
171178

172179
fd.Extended, err = r.ReadExtendedHeaders()
173180
if err != nil {
174-
return nil, err
181+
return fd, err
175182
}
176183

177184
var origTime, newTime *time.Time
@@ -261,13 +268,20 @@ func (r *FileDiffReader) readOneFileHeader(prefix []byte) (filename string, time
261268
return filename, timestamp, err
262269
}
263270

264-
var i = 0
271+
// OverflowError is returned when we have overflowed into the start
272+
// of the next file while reading extended headers.
273+
type OverflowError string
274+
275+
func (e OverflowError) Error() string {
276+
return fmt.Sprintf("overflowed into next file: %s", e)
277+
}
265278

266279
// ReadExtendedHeaders reads the extended header lines, if any, from a
267280
// unified diff file (e.g., git's "diff --git a/foo.go b/foo.go", "new
268281
// mode <mode>", "rename from <path>", etc.).
269282
func (r *FileDiffReader) ReadExtendedHeaders() ([]string, error) {
270283
var xheaders []string
284+
firstLine := true
271285
for {
272286
var line []byte
273287
if r.fileHeaderLine == nil {
@@ -283,6 +297,13 @@ func (r *FileDiffReader) ReadExtendedHeaders() ([]string, error) {
283297
r.fileHeaderLine = nil
284298
}
285299

300+
if bytes.HasPrefix(line, []byte("diff --git")) {
301+
if firstLine {
302+
firstLine = false
303+
} else {
304+
return xheaders, OverflowError(line)
305+
}
306+
}
286307
if bytes.HasPrefix(line, []byte("--- ")) {
287308
// We've reached the file header.
288309
r.fileHeaderLine = line // pass to readOneFileHeader (see fileHeaderLine field doc)

0 commit comments

Comments
 (0)