diff options
| author | 2026-02-22 10:45:51 +0800 | |
|---|---|---|
| committer | 2026-02-22 10:45:51 +0800 | |
| commit | 6470fe1e49f8cdec0feba02d70c3329113562f17 (patch) | |
| tree | 356ea06cbe7effa9ce07fe3f5d64b81e3875b918 | |
| parent | format/delta/apply, etc.: ReadHeaderSizes should use ByteReader (diff) | |
| signature | No signature | |
repository: Make traverseTreeIter use filemode instead of resolving size v0.1.30
| -rw-r--r-- | repository/traversal_helpers_test.go | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/repository/traversal_helpers_test.go b/repository/traversal_helpers_test.go index 1f98fcc7..b23a81c8 100644 --- a/repository/traversal_helpers_test.go +++ b/repository/traversal_helpers_test.go @@ -3,24 +3,28 @@ package repository_test import ( "codeberg.org/lindenii/furgit/object" "codeberg.org/lindenii/furgit/objectid" - "codeberg.org/lindenii/furgit/objecttype" "codeberg.org/lindenii/furgit/repository" ) +type treeWalkFrame struct { + id objectid.ObjectID + isTree bool +} + func traverseTreeIter(repo *repository.Repository, root objectid.ObjectID) (int, error) { - stack := []objectid.ObjectID{root} + stack := []treeWalkFrame{{id: root, isTree: true}} total := 0 for len(stack) > 0 { - id := stack[len(stack)-1] + frame := stack[len(stack)-1] stack = stack[:len(stack)-1] + id := frame.id - ty, _, err := repo.Objects().ReadHeader(id) - if err != nil { - return 0, err - } - total++ - if ty != objecttype.TypeTree { + if !frame.isTree { + if _, err := repo.ReadStoredSize(id); err != nil { + return 0, err + } + total++ continue } @@ -28,12 +32,16 @@ func traverseTreeIter(repo *repository.Repository, root objectid.ObjectID) (int, if err != nil { return 0, err } + total++ for i := len(tree.Tree().Entries) - 1; i >= 0; i-- { entry := tree.Tree().Entries[i] if entry.Mode == object.FileModeGitlink { continue } - stack = append(stack, entry.ID) + stack = append(stack, treeWalkFrame{ + id: entry.ID, + isTree: entry.Mode == object.FileModeDir, + }) } } |
