aboutsummaryrefslogtreecommitdiff
path: root/object/tree/insert.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-30 05:40:58 +0000
committerGravatar Runxi Yu2026-03-30 05:44:56 +0000
commitaa7e2873aa4da53fbaa4774fdd33f5af20c1afb0 (patch)
tree0d1367f693324ea8287ccef52ba524f8515ca146 /object/tree/insert.go
parentREADME, etc.: Use proper unicode hyphens :P (diff)
signatureNo signature
object/tree: Add helpers and cleanup v0.1.152
Diffstat (limited to 'object/tree/insert.go')
-rw-r--r--object/tree/insert.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/object/tree/insert.go b/object/tree/insert.go
index 2da86514..683af4a7 100644
--- a/object/tree/insert.go
+++ b/object/tree/insert.go
@@ -2,7 +2,7 @@ package tree
import (
"fmt"
- "sort"
+ "slices"
)
// InsertEntry inserts a tree entry while preserving Git ordering.
@@ -15,13 +15,13 @@ func (tree *Tree) InsertEntry(newEntry TreeEntry) error {
newEntry.Name = append([]byte(nil), newEntry.Name...)
- newIsTree := newEntry.Mode == FileModeDir
- insertAt := sort.Search(len(tree.Entries), func(i int) bool {
- return TreeEntryNameCompare(tree.Entries[i].Name, tree.Entries[i].Mode, newEntry.Name, newIsTree) >= 0
+ insertAt, _ := slices.BinarySearchFunc(tree.Entries, treeEntrySearch{
+ name: newEntry.Name,
+ isTree: newEntry.Mode == FileModeDir,
+ }, func(entry TreeEntry, search treeEntrySearch) int {
+ return TreeEntryNameCompare(entry.Name, entry.Mode, search.name, search.isTree)
})
- tree.Entries = append(tree.Entries, TreeEntry{})
- copy(tree.Entries[insertAt+1:], tree.Entries[insertAt:])
- tree.Entries[insertAt] = newEntry
+ tree.Entries = slices.Insert(tree.Entries, insertAt, newEntry)
return nil
}