aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Ravn <james@r-vn.org>2018-07-05 10:50:09 +0100
committerJames Ravn <james@r-vn.org>2018-07-10 10:05:04 +0100
commitb304997a387a5106321fe87069a6f136d9fbd1f6 (patch)
tree2bc5aba417803c5c887ce9c21701c94eba74e920
parentfcfd239c49baee9195f7b8234f46288a29c3951c (diff)
downloadgo-git-b304997a387a5106321fe87069a6f136d9fbd1f6.tar.gz
plumbing: object, expose ErrEntryNotFound in FindEntry. Fixes #883
FindEntry will return ErrDirNotFound if the directory doesn't exist. But it doesn't return a public error if the entry itself is missing. This exposes the internal error ErrEntryNotFound, so users can programmatically check for this condition. Signed-off-by: James Ravn <james@r-vn.org>
-rw-r--r--plumbing/object/tree.go5
-rw-r--r--plumbing/object/tree_test.go6
2 files changed, 8 insertions, 3 deletions
diff --git a/plumbing/object/tree.go b/plumbing/object/tree.go
index 30bbcb0..7d9e90b 100644
--- a/plumbing/object/tree.go
+++ b/plumbing/object/tree.go
@@ -25,6 +25,7 @@ var (
ErrMaxTreeDepth = errors.New("maximum tree depth exceeded")
ErrFileNotFound = errors.New("file not found")
ErrDirectoryNotFound = errors.New("directory not found")
+ ErrEntryNotFound = errors.New("entry not found")
)
// Tree is basically like a directory - it references a bunch of other trees
@@ -166,8 +167,6 @@ func (t *Tree) dir(baseName string) (*Tree, error) {
return tree, err
}
-var errEntryNotFound = errors.New("entry not found")
-
func (t *Tree) entry(baseName string) (*TreeEntry, error) {
if t.m == nil {
t.buildMap()
@@ -175,7 +174,7 @@ func (t *Tree) entry(baseName string) (*TreeEntry, error) {
entry, ok := t.m[baseName]
if !ok {
- return nil, errEntryNotFound
+ return nil, ErrEntryNotFound
}
return entry, nil
diff --git a/plumbing/object/tree_test.go b/plumbing/object/tree_test.go
index 3a687dd..59d5d21 100644
--- a/plumbing/object/tree_test.go
+++ b/plumbing/object/tree_test.go
@@ -114,6 +114,12 @@ func (s *TreeSuite) TestFindEntry(c *C) {
c.Assert(e.Name, Equals, "foo.go")
}
+func (s *TreeSuite) TestFindEntryNotFound(c *C) {
+ e, err := s.Tree.FindEntry("not-found")
+ c.Assert(e, IsNil)
+ c.Assert(err, Equals, ErrEntryNotFound)
+}
+
// Overrides returned plumbing.EncodedObject for given hash.
// Otherwise, delegates to actual storer to get real object
type fakeStorer struct {