From a504b72b1ad9c2fe5a8460a3073f8f69cade2c17 Mon Sep 17 00:00:00 2001 From: Antonio Jesus Navarro Perez Date: Wed, 29 Mar 2017 12:07:52 +0200 Subject: 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. --- references.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'references.go') 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) -- cgit