aboutsummaryrefslogtreecommitdiffstats
path: root/tag.go
diff options
context:
space:
mode:
authorSantiago M. Mola <santi@mola.io>2016-08-29 22:39:08 +0200
committerMáximo Cuadros <mcuadros@gmail.com>2016-08-29 22:39:08 +0200
commit5cf20a4edf7803458a1c2ec94e902369bed76f28 (patch)
treeb6a0276ab12f82383818892064038fb0b79e161b /tag.go
parenta97ca42cbce377b5725ecc41e4539fc7e263b90d (diff)
downloadgo-git-5cf20a4edf7803458a1c2ec94e902369bed76f28.tar.gz
object: Add Encode method to all objects. (#70)
Encode method encodes a typed object (commit, tree, tag, blob) into raw core.Object representation. Additionally, Decode does not trim commit message lines. This is needed for Decode/Encode to be idempotent.
Diffstat (limited to 'tag.go')
-rw-r--r--tag.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/tag.go b/tag.go
index fec2abf..1391fad 100644
--- a/tag.go
+++ b/tag.go
@@ -105,6 +105,31 @@ func (t *Tag) Decode(o core.Object) (err error) {
return nil
}
+// Encode transforms a Tag into a core.Object.
+func (t *Tag) Encode(o core.Object) error {
+ o.SetType(core.TagObject)
+ w, err := o.Writer()
+ if err != nil {
+ return err
+ }
+ defer checkClose(w, &err)
+ if _, err = fmt.Fprintf(w,
+ "object %s\ntype %s\ntag %s\ntagger ",
+ t.Target.String(), t.TargetType.Bytes(), t.Name); err != nil {
+ return err
+ }
+ if err = t.Tagger.Encode(w); err != nil {
+ return err
+ }
+ if _, err = fmt.Fprint(w, "\n\n"); err != nil {
+ return err
+ }
+ if _, err = fmt.Fprint(w, t.Message); err != nil {
+ return err
+ }
+ return err
+}
+
// Commit returns the commit pointed to by the tag. If the tag points to a
// different type of object ErrUnsupportedObject will be returned.
func (t *Tag) Commit() (*Commit, error) {