aboutsummaryrefslogtreecommitdiff
path: root/object/signature/append.go
diff options
context:
space:
mode:
Diffstat (limited to 'object/signature/append.go')
-rw-r--r--object/signature/append.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/object/signature/append.go b/object/signature/append.go
new file mode 100644
index 00000000..3db52752
--- /dev/null
+++ b/object/signature/append.go
@@ -0,0 +1,32 @@
+package signature
+
+import (
+ "fmt"
+ "strconv"
+ "slices"
+)
+
+// Bytes renders the signature in canonical Git format.
+func (signature Signature) AppendTo(dst []byte) ([]byte) {
+ slices.Grow(dst, len(signature.Name) + len(signature.Email) + 32)
+ dst = append(dst, signature.Name...)
+ dst = append(dst, ' ', '<')
+ dst = append(dst, signature.Email...)
+ dst = append(dst, '>', ' ')
+ strconv.AppendInt(dst, signature.WhenUnix, 10)
+ dst = append(dst, ' ')
+
+ offset := signature.OffsetMinutes
+
+ sign := '+'
+ if offset < 0 {
+ sign = '-'
+ offset = -offset
+ }
+
+ hh := offset / 60
+ mm := offset % 60
+ dst = fmt.Appendf(dst, "%c%02d%02d", sign, hh, mm)
+
+ return dst
+}