···
···
+
TerminateWalk error = errors.New("terminate walk")
+
type callback = func(node object.TreeEntry, parent *object.Tree, fullPath string) error
+
func (g *GitRepo) Walk(
+
c, err := g.r.CommitObject(g.h)
+
return fmt.Errorf("commit object: %w", err)
+
return fmt.Errorf("file tree: %w", err)
+
subtree, err = tree.Tree(root)
+
return fmt.Errorf("sub tree: %w", err)
+
return g.walkHelper(ctx, root, subtree, cb)
+
func (g *GitRepo) walkHelper(
+
currentTree *object.Tree,
+
for _, e := range currentTree.Entries {
+
// check if context hits deadline before processing
+
mode, err := e.Mode.ToOSFileMode()
+
err = cb(e, currentTree, root)
+
if errors.Is(err, TerminateWalk) {
+
subtree, err := currentTree.Tree(e.Name)
+
return fmt.Errorf("sub tree %s: %w", e.Name, err)
+
fullPath := path.Join(root, e.Name)
+
err = g.walkHelper(ctx, fullPath, subtree, cb)