diff options
| author | 2026-03-30 05:40:58 +0000 | |
|---|---|---|
| committer | 2026-03-30 05:44:56 +0000 | |
| commit | aa7e2873aa4da53fbaa4774fdd33f5af20c1afb0 (patch) | |
| tree | 0d1367f693324ea8287ccef52ba524f8515ca146 /object/tree/insert.go | |
| parent | README, etc.: Use proper unicode hyphens :P (diff) | |
| signature | No signature | |
object/tree: Add helpers and cleanup v0.1.152
Diffstat (limited to 'object/tree/insert.go')
| -rw-r--r-- | object/tree/insert.go | 14 |
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 } |
