aboutsummaryrefslogtreecommitdiffstats
path: root/tree_walker.go
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2016-08-30 11:29:47 +0200
committerMáximo Cuadros <mcuadros@gmail.com>2016-08-30 11:29:47 +0200
commit2c527d02ceac3879f82ab53645b6c7c03c0e5d71 (patch)
treeebdd08843d1f5c6df7dff366ad5de8b4b2977e8c /tree_walker.go
parentd47285fa6e39399f639d8a9c3209d7d9bfb63ce4 (diff)
downloadgo-git-2c527d02ceac3879f82ab53645b6c7c03c0e5d71.tar.gz
TreeWalker optimization
Diffstat (limited to 'tree_walker.go')
-rw-r--r--tree_walker.go8
1 files changed, 5 insertions, 3 deletions
diff --git a/tree_walker.go b/tree_walker.go
index d4aa01a..cbd81c4 100644
--- a/tree_walker.go
+++ b/tree_walker.go
@@ -43,7 +43,8 @@ func NewTreeWalker(r *Repository, t *Tree) *TreeWalker {
// In the current implementation any objects which cannot be found in the
// underlying repository will be skipped automatically. It is possible that this
// may change in future versions.
-func (w *TreeWalker) Next() (name string, entry TreeEntry, obj Object, err error) {
+func (w *TreeWalker) Next() (name string, entry TreeEntry, err error) {
+ var obj Object
for {
current := len(w.stack) - 1
if current < 0 {
@@ -51,6 +52,7 @@ func (w *TreeWalker) Next() (name string, entry TreeEntry, obj Object, err error
err = io.EOF
return
}
+
if current > maxTreeDepth {
// We're probably following bad data or some self-referencing tree
err = ErrMaxTreeDepth
@@ -65,6 +67,7 @@ func (w *TreeWalker) Next() (name string, entry TreeEntry, obj Object, err error
w.base = path.Clean(w.base) // Remove trailing slash
continue
}
+
if err != nil {
return
}
@@ -73,10 +76,9 @@ func (w *TreeWalker) Next() (name string, entry TreeEntry, obj Object, err error
err = nil
continue
}
+
if entry.Mode.IsDir() {
obj, err = w.r.Tree(entry.Hash)
- } else {
- obj, err = w.r.Blob(entry.Hash)
}
name = path.Join(w.base, entry.Name)