diff options
| author | 2026-03-06 01:48:44 +0800 | |
|---|---|---|
| committer | 2026-03-06 01:48:44 +0800 | |
| commit | 120509f0aad0e945d8e0fc90a822fa904fb70b68 (patch) | |
| tree | 20a541f059591b35795a1a5d3b7dcf48ec711b6a /repository/traversal_helpers_test.go | |
| parent | refstore/loose: Fix package-level comment (diff) | |
| signature | No signature | |
repository: Refactor v0.1.55
Diffstat (limited to 'repository/traversal_helpers_test.go')
| -rw-r--r-- | repository/traversal_helpers_test.go | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/repository/traversal_helpers_test.go b/repository/traversal_helpers_test.go deleted file mode 100644 index 143d3b62..00000000 --- a/repository/traversal_helpers_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package repository_test - -import ( - "codeberg.org/lindenii/furgit/object" - "codeberg.org/lindenii/furgit/objectid" - "codeberg.org/lindenii/furgit/repository" -) - -type treeWalkFrame struct { - id objectid.ObjectID - isTree bool -} - -func traverseTreeIter(repo *repository.Repository, root objectid.ObjectID) (int, error) { - stack := []treeWalkFrame{{id: root, isTree: true}} - total := 0 - - for len(stack) > 0 { - frame := stack[len(stack)-1] - stack = stack[:len(stack)-1] - id := frame.id - - if !frame.isTree { - _, err := repo.Objects().ReadSize(id) - if err != nil { - return 0, err - } - - total++ - - continue - } - - tree, err := repo.ReadStoredTree(id) - 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, treeWalkFrame{ - id: entry.ID, - isTree: entry.Mode == object.FileModeDir, - }) - } - } - - return total, nil -} - -func traverseReachableIter(repo *repository.Repository, root objectid.ObjectID) (int, error) { - stack := []objectid.ObjectID{root} - visited := make(map[objectid.ObjectID]struct{}) - total := 0 - - for len(stack) > 0 { - id := stack[len(stack)-1] - stack = stack[:len(stack)-1] - - _, ok := visited[id] - if ok { - continue - } - - visited[id] = struct{}{} - - stored, err := repo.ReadStored(id) - if err != nil { - return 0, err - } - - total++ - - switch obj := stored.Object().(type) { - case *object.Commit: - stack = append(stack, obj.Tree) - stack = append(stack, obj.Parents...) - case *object.Tree: - for i := len(obj.Entries) - 1; i >= 0; i-- { - entry := obj.Entries[i] - if entry.Mode == object.FileModeGitlink { - continue - } - - stack = append(stack, entry.ID) - } - case *object.Tag: - stack = append(stack, obj.Target) - case *object.Blob: - default: - // Unknown parsed object variants are treated as leaves. - } - } - - return total, nil -} |
