aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Jesus Navarro Perez <antonio@sourced.tech>2017-03-29 12:07:52 +0200
committerAntonio Jesus Navarro Perez <antnavper@gmail.com>2017-04-19 13:04:13 +0200
commita504b72b1ad9c2fe5a8460a3073f8f69cade2c17 (patch)
treee906493492b8e7f24b30dafb82d1812043bb884b
parentc68ac9efc98e11b88f143e0e083403624a794baf (diff)
downloadgo-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.
-rw-r--r--references.go16
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)