From 5cf20a4edf7803458a1c2ec94e902369bed76f28 Mon Sep 17 00:00:00 2001 From: "Santiago M. Mola" Date: Mon, 29 Aug 2016 22:39:08 +0200 Subject: 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. --- tag.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'tag.go') 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) { -- cgit