diff options
author | Antonio Jesus Navarro Perez <antonio@sourced.tech> | 2017-03-29 12:07:52 +0200 |
---|---|---|
committer | Antonio Jesus Navarro Perez <antnavper@gmail.com> | 2017-04-19 13:04:13 +0200 |
commit | a504b72b1ad9c2fe5a8460a3073f8f69cade2c17 (patch) | |
tree | e906493492b8e7f24b30dafb82d1812043bb884b /references.go | |
parent | c68ac9efc98e11b88f143e0e083403624a794baf (diff) | |
download | go-git-a504b72b1ad9c2fe5a8460a3073f8f69cade2c17.tar.gz |
references.go: fix Parents from commit iterator
Avoid a panic when we are iterating parents from a commit. There are more than EOF errors, like Parse errors. Now instead of throw a panic we return the error.
Diffstat (limited to 'references.go')
-rw-r--r-- | references.go | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/references.go b/references.go index fc81103..ff2c1d3 100644 --- a/references.go +++ b/references.go @@ -76,8 +76,10 @@ func walkGraph(result *[]*object.Commit, seen *map[plumbing.Hash]struct{}, curre // optimization: don't traverse branches that does not // contain the path. - parents := parentsContainingPath(path, current) - + parents, err := parentsContainingPath(path, current) + if err != nil { + return err + } switch len(parents) { // if the path is not found in any of its parents, the path was // created by this commit; we must add it to the revisions list and @@ -110,18 +112,18 @@ func walkGraph(result *[]*object.Commit, seen *map[plumbing.Hash]struct{}, curre return nil } -func parentsContainingPath(path string, c *object.Commit) []*object.Commit { +func parentsContainingPath(path string, c *object.Commit) ([]*object.Commit, error) { // TODO: benchmark this method making git.object.Commit.parent public instead of using // an iterator var result []*object.Commit iter := c.Parents() for { parent, err := iter.Next() + if err == io.EOF { + return result, nil + } if err != nil { - if err == io.EOF { - return result - } - panic("unreachable") + return nil, err } if _, err := parent.File(path); err == nil { result = append(result, parent) |