···11+package tree
22+33+import (
44+ "bytes"
55+)
66+77+// SplitPath splits one slash-separated tree path into components.
88+func SplitPath(path []byte) [][]byte {
99+ if len(path) == 0 {
1010+ return nil
1111+ }
1212+1313+ parts := bytes.Split(path, []byte{'/'})
1414+ for i := range parts {
1515+ parts[i] = bytes.Clone(parts[i])
1616+ }
1717+1818+ return parts
1919+}
+7-7
object/tree/remove.go
···33import (
44 "bytes"
55 "fmt"
66+ "slices"
67)
7889// RemoveEntry removes a tree entry by name.
···1112 return fmt.Errorf("object: tree: entry %q not found", name)
1213 }
13141414- for i := range tree.Entries {
1515- if bytes.Equal(tree.Entries[i].Name, name) {
1616- copy(tree.Entries[i:], tree.Entries[i+1:])
1717- tree.Entries = tree.Entries[:len(tree.Entries)-1]
1818-1919- return nil
2020- }
1515+ index := slices.IndexFunc(tree.Entries, func(entry TreeEntry) bool {
1616+ return bytes.Equal(entry.Name, name)
1717+ })
1818+ if index >= 0 {
1919+ tree.Entries = slices.Delete(tree.Entries, index, index+1)
2020+ return nil
2121 }
22222323 return fmt.Errorf("object: tree: entry %q not found", name)