aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-13 16:30:48 +0000
committerGravatar Runxi Yu2026-06-13 16:30:48 +0000
commit3eb7a900d5175cd2c34967a5fc10dd23efea958b (patch)
treea15d9b427e246964fb84311c79d26224b0809168 /object
parentobject/tree: Parse, entries, etc don't clone. (diff)
object/tree: Clone
Diffstat (limited to 'object')
-rw-r--r--object/tree/clone.go24
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
+}