aboutsummaryrefslogtreecommitdiff
path: root/repository/tree_resolve.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-04 08:26:56 +0800
committerGravatar Runxi Yu2026-03-04 08:59:53 +0800
commitab7501be34032fb9e5c48726a68ae90a917af9eb (patch)
tree20d005647569befea8133e953c3270e8fd2a2a5b /repository/tree_resolve.go
parent*: gofumpt (diff)
signatureNo signature
*: Lint
Diffstat (limited to 'repository/tree_resolve.go')
-rw-r--r--repository/tree_resolve.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/repository/tree_resolve.go b/repository/tree_resolve.go
index 6b7023ba..d4ef529e 100644
--- a/repository/tree_resolve.go
+++ b/repository/tree_resolve.go
@@ -16,11 +16,13 @@ func (repo *Repository) ResolveTreeEntry(tree *objectstored.StoredTree, parts []
if tree == nil {
return object.TreeEntry{}, errors.New("repository: nil root tree")
}
+
if len(parts) == 0 {
return object.TreeEntry{}, errors.New("repository: empty tree path")
}
current := tree
+
for i, part := range parts {
if len(part) == 0 {
return object.TreeEntry{}, errors.New("repository: empty tree path segment")
@@ -30,9 +32,11 @@ func (repo *Repository) ResolveTreeEntry(tree *objectstored.StoredTree, parts []
if entry == nil {
return object.TreeEntry{}, fmt.Errorf("repository: tree entry %q not found", part)
}
+
if i == len(parts)-1 {
return *entry, nil
}
+
if entry.Mode != object.FileModeDir {
return object.TreeEntry{}, fmt.Errorf("repository: path segment %q is not a tree", part)
}
@@ -41,6 +45,7 @@ func (repo *Repository) ResolveTreeEntry(tree *objectstored.StoredTree, parts []
if err != nil {
return object.TreeEntry{}, err
}
+
current = next
}