Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions diff/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,11 @@ func (r *MultiFileDiffReader) ReadFileWithTrailingContent() (*FileDiff, string,

fd, err := fr.ReadAllHeaders()
if err != nil {
switch e := err.(type) {
case *ParseError:
if e.Err == ErrNoFileHeader || e.Err == ErrExtendedHeadersEOF {
var pe *ParseError
var oe OverflowError
switch {
case errors.As(err, &pe):
if errors.Is(pe.Err, ErrNoFileHeader) || errors.Is(pe.Err, ErrExtendedHeadersEOF) {
// Any non-diff content preceding a valid diff is included in the
// extended headers of the following diff. In this way, mixed diff /
// non-diff content can be parsed. Trailing non-diff content is
Expand All @@ -91,8 +93,8 @@ func (r *MultiFileDiffReader) ReadFileWithTrailingContent() (*FileDiff, string,
}
return nil, "", err

case OverflowError:
r.nextFileFirstLine = []byte(e)
case errors.As(err, &oe):
r.nextFileFirstLine = []byte(oe)
return fd, "", nil

default:
Expand Down Expand Up @@ -124,8 +126,10 @@ func (r *MultiFileDiffReader) ReadFileWithTrailingContent() (*FileDiff, string,
r.line = fr.line
r.offset = fr.offset
if err != nil {
if e0, ok := err.(*ParseError); ok {
if e, ok := e0.Err.(*ErrBadHunkLine); ok {
var e0 *ParseError
if errors.As(err, &e0) {
var e *ErrBadHunkLine
if errors.As(e0.Err, &e) {
// This just means we finished reading the hunks for the
// current file. See the ErrBadHunkLine doc for more info.
r.nextFileFirstLine = e.Line
Expand Down Expand Up @@ -224,13 +228,15 @@ func (r *FileDiffReader) ReadAllHeaders() (*FileDiff, error) {
fd := &FileDiff{}

fd.Extended, err = r.ReadExtendedHeaders()
if pe, ok := err.(*ParseError); ok && pe.Err == ErrExtendedHeadersEOF {
var pe *ParseError
var oe OverflowError
if errors.As(err, &pe) && errors.Is(pe.Err, ErrExtendedHeadersEOF) {
wasEmpty := handleEmpty(fd)
if wasEmpty {
return fd, nil
}
return fd, err
} else if _, ok := err.(OverflowError); ok {
} else if errors.As(err, &oe) {
handleEmpty(fd)
return fd, err
} else if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion diff/reader_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func (l *lineReader) nextNextLineStartsWith(prefix string) (bool, error) {
// false and ignore the error when readErr is io.EOF.
func (l *lineReader) lineHasPrefix(line []byte, prefix string, readErr error) (bool, error) {
if readErr != nil {
if readErr == io.EOF || readErr == bufio.ErrBufferFull {
if readErr == io.EOF || errors.Is(readErr, bufio.ErrBufferFull) {
return false, nil
}
return false, readErr
Expand Down
Loading