From 7847657e0820af98120031f719b8ede635ad8c07 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 25 Mar 2026 14:49:17 +0000 Subject: object: Split each object type into its own package --- object/tree/insert.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 object/tree/insert.go (limited to 'object/tree/insert.go') diff --git a/object/tree/insert.go b/object/tree/insert.go new file mode 100644 index 00000000..bca4aa49 --- /dev/null +++ b/object/tree/insert.go @@ -0,0 +1,23 @@ +package tree + +import ( + "fmt" + "sort" +) + +// InsertEntry inserts a tree entry while preserving Git ordering. +func (tree *Tree) InsertEntry(newEntry TreeEntry) error { + if tree.entry(newEntry.Name, true) != nil || tree.entry(newEntry.Name, false) != nil { + return fmt.Errorf("object: tree: entry %q already exists", 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 + }) + tree.Entries = append(tree.Entries, TreeEntry{}) + copy(tree.Entries[insertAt+1:], tree.Entries[insertAt:]) + tree.Entries[insertAt] = newEntry + + return nil +} -- cgit v1.3.1-10-gc9f91