diff options
| author | 2026-06-13 16:30:48 +0000 | |
|---|---|---|
| committer | 2026-06-13 16:30:48 +0000 | |
| commit | 3eb7a900d5175cd2c34967a5fc10dd23efea958b (patch) | |
| tree | a15d9b427e246964fb84311c79d26224b0809168 | |
| parent | object/tree: Parse, entries, etc don't clone. (diff) | |
object/tree: Clone
| -rw-r--r-- | object/tree/clone.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/object/tree/clone.go b/object/tree/clone.go new file mode 100644 index 00000000..d00c62f2 --- /dev/null +++ b/object/tree/clone.go @@ -0,0 +1,24 @@ +package tree + +import "bytes" + +// Clone returns a deep copy of the tree +// whose entry names are independent of any memory the original may alias. +// +// Labels: Life-Independent. +func (tree *Tree) Clone() *Tree { + if tree.entries == nil { + return &Tree{} + } + + clone := &Tree{entries: make([]Entry, len(tree.entries))} + for i, entry := range tree.entries { + clone.entries[i] = Entry{ + Mode: entry.Mode, + Name: bytes.Clone(entry.Name), + ID: entry.ID, + } + } + + return clone +} |
