aboutsummaryrefslogtreecommitdiff
path: root/object/signature/serialize.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 14:49:17 +0000
committerGravatar Runxi Yu2026-03-25 15:02:22 +0000
commit7847657e0820af98120031f719b8ede635ad8c07 (patch)
tree8c4439c78f72f1382edc809b49be33115847b6e7 /object/signature/serialize.go
parentobject: Remove type.go (diff)
signatureNo signature
object: Split each object type into its own package v0.1.108
Diffstat (limited to 'object/signature/serialize.go')
-rw-r--r--object/signature/serialize.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/object/signature/serialize.go b/object/signature/serialize.go
new file mode 100644
index 00000000..3f60d20d
--- /dev/null
+++ b/object/signature/serialize.go
@@ -0,0 +1,33 @@
+package signature
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+)
+
+// Serialize renders the signature in canonical Git format.
+func (signature Signature) Serialize() ([]byte, error) {
+ var b strings.Builder
+ b.Grow(len(signature.Name) + len(signature.Email) + 32)
+ b.Write(signature.Name)
+ b.WriteString(" <")
+ b.Write(signature.Email)
+ b.WriteString("> ")
+ b.WriteString(strconv.FormatInt(signature.WhenUnix, 10))
+ b.WriteByte(' ')
+
+ offset := signature.OffsetMinutes
+
+ sign := '+'
+ if offset < 0 {
+ sign = '-'
+ offset = -offset
+ }
+
+ hh := offset / 60
+ mm := offset % 60
+ fmt.Fprintf(&b, "%c%02d%02d", sign, hh, mm)
+
+ return []byte(b.String()), nil
+}