aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-13 16:02:55 +0000
committerGravatar Runxi Yu2026-06-13 16:02:55 +0000
commit1fb7a56388dd10361aee699a288a1ac5ae4814ee (patch)
tree1b94997e48e3b06a2fb065569a90ede77941b465 /object
parentobject/tag: Don't clone on parse (diff)
object/tag: Clone
Diffstat (limited to 'object')
-rw-r--r--object/tag/clone.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/object/tag/clone.go b/object/tag/clone.go
new file mode 100644
index 00000000..0f792bc1
--- /dev/null
+++ b/object/tag/clone.go
@@ -0,0 +1,29 @@
+package tag
+
+import "bytes"
+
+// Clone returns a deep copy of the tag
+// whose byte fields are independent of any memory the original may alias.
+//
+// Labels: Life-Independent.
+func (tag *Tag) Clone() *Tag {
+ clone := &Tag{
+ TargetID: tag.TargetID,
+ TargetType: tag.TargetType,
+ Name: bytes.Clone(tag.Name),
+ Tagger: tag.Tagger.Clone(),
+ Message: bytes.Clone(tag.Message),
+ }
+
+ if tag.ExtraHeaders != nil {
+ clone.ExtraHeaders = make([]ExtraHeader, len(tag.ExtraHeaders))
+ for i, h := range tag.ExtraHeaders {
+ clone.ExtraHeaders[i] = ExtraHeader{
+ Key: bytes.Clone(h.Key),
+ Value: bytes.Clone(h.Value),
+ }
+ }
+ }
+
+ return clone
+}