aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-16 00:00:00 +0000
committerGravatar Runxi Yu2025-11-16 00:00:00 +0000
commitd944abb28ea70d98d36598a1f30c3738a431013e (patch)
tree23347a489b7668cbc2d754ecc2c010acfde0b7d0
parentRename ObjType -> ObjectType (diff)
signature
All Serialize should be able to error out
-rw-r--r--ident.go4
-rw-r--r--obj_commit.go21
-rw-r--r--obj_tag.go6
3 files changed, 23 insertions, 8 deletions
diff --git a/ident.go b/ident.go
index 1d756695..5a01d8ea 100644
--- a/ident.go
+++ b/ident.go
@@ -94,7 +94,7 @@ func parseIdent(line []byte) (*Ident, error) {
}
// Serialize renders an Ident into canonical Git format.
-func (ident Ident) Serialize() []byte {
+func (ident Ident) Serialize() ([]byte, error) {
var b strings.Builder
b.Grow(len(ident.Name) + len(ident.Email) + 32)
b.Write(ident.Name)
@@ -113,7 +113,7 @@ func (ident Ident) Serialize() []byte {
hh := offset / 60
mm := offset % 60
fmt.Fprintf(&b, "%c%02d%02d", sign, hh, mm)
- return []byte(b.String())
+ return []byte(b.String()), nil
}
// When returns the timestamp as time.Time using the embedded offset.
diff --git a/obj_commit.go b/obj_commit.go
index 8abb363f..2b87322f 100644
--- a/obj_commit.go
+++ b/obj_commit.go
@@ -91,27 +91,38 @@ func parseCommit(id Hash, body []byte, repo *Repository) (*Commit, error) {
return c, nil
}
-func commitBody(c *Commit) []byte {
+func commitBody(c *Commit) ([]byte, error) {
var buf bytes.Buffer
fmt.Fprintf(&buf, "tree %s\n", c.Tree.String())
for _, p := range c.Parents {
fmt.Fprintf(&buf, "parent %s\n", p.String())
}
buf.WriteString("author ")
- buf.Write(c.Author.Serialize())
+ ab, err := c.Author.Serialize()
+ if err != nil {
+ return nil, err
+ }
+ buf.Write(ab)
buf.WriteByte('\n')
buf.WriteString("committer ")
- buf.Write(c.Committer.Serialize())
+ cb, err := c.Committer.Serialize()
+ if err != nil {
+ return nil, err
+ }
+ buf.Write(cb)
buf.WriteByte('\n')
buf.WriteByte('\n')
buf.Write(c.Message)
- return buf.Bytes()
+ return buf.Bytes(), nil
}
// Serialize renders a Commit into canonical Git format.
func (commit *Commit) Serialize() ([]byte, error) {
- body := commitBody(commit)
+ body, err := commitBody(commit)
+ if err != nil {
+ return nil, err
+ }
header, err := headerForType(ObjCommit, body)
if err != nil {
return nil, err
diff --git a/obj_tag.go b/obj_tag.go
index 440eb15e..31018c2c 100644
--- a/obj_tag.go
+++ b/obj_tag.go
@@ -118,7 +118,11 @@ func tagBody(t *Tag) ([]byte, error) {
buf.WriteByte('\n')
if t.Tagger != nil {
buf.WriteString("tagger ")
- buf.Write(t.Tagger.Serialize())
+ tb, err := t.Tagger.Serialize()
+ if err != nil {
+ return nil, err
+ }
+ buf.Write(tb)
buf.WriteByte('\n')
}
buf.WriteByte('\n')