diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2018-10-16 00:12:10 +0200 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2018-10-16 00:12:10 +0200 |
commit | c4be04433cf894cead23cd1de2be54c2886e44ad (patch) | |
tree | 2f4847115bb33bd571b2d8bcf0e413f246dd2547 /blame.go | |
parent | 8153e040f68da6002096ef177a11510f4fb06769 (diff) | |
download | go-git-c4be04433cf894cead23cd1de2be54c2886e44ad.tar.gz |
blame: fix edge case with missing \n in content length causing mismatched length error
Signed-off-by: Máximo Cuadros <mcuadros@gmail.com>
Diffstat (limited to 'blame.go')
-rw-r--r-- | blame.go | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -123,14 +123,25 @@ func newLine(author, text string, date time.Time, hash plumbing.Hash) *Line { } func newLines(contents []string, commits []*object.Commit) ([]*Line, error) { - if len(contents) != len(commits) { - return nil, errors.New("contents and commits have different length") + lcontents := len(contents) + lcommits := len(commits) + + if lcontents != lcommits { + if lcontents == lcommits-1 && contents[lcontents-1] != "\n" { + contents = append(contents, "\n") + } else { + return nil, errors.New("contents and commits have different length") + } } - result := make([]*Line, 0, len(contents)) + + result := make([]*Line, 0, lcontents) for i := range contents { - l := newLine(commits[i].Author.Email, contents[i], commits[i].Author.When, commits[i].Hash) - result = append(result, l) + result = append(result, newLine( + commits[i].Author.Email, contents[i], + commits[i].Author.When, commits[i].Hash, + )) } + return result, nil } |