Fast implementation of Git in pure Go

obj, loose: Add Object.Serialize() interface

runxiyu.tngl.sh 397eb221 50cd7868

verified
+6 -16
+3 -16
loose.go
··· 173 173 174 174 // WriteLooseObject writes an object to the repository as a loose object. 175 175 func (repo *Repository) WriteLooseObject(obj Object) (Hash, error) { 176 - var raw []byte 177 - var err error 178 - 179 - switch o := obj.(type) { 180 - case *Blob: 181 - raw, err = o.Serialize() 182 - case *Tree: 183 - raw, err = o.Serialize() 184 - case *Commit: 185 - raw, err = o.Serialize() 186 - case *Tag: 187 - raw, err = o.Serialize() 188 - default: 189 - return Hash{}, fmt.Errorf("furgit: unsupported object type for writing: %T", obj) 176 + if obj == nil { 177 + return Hash{}, ErrInvalidObject 190 178 } 191 - // TODO: Consider adding serialize to the interface? 192 - 179 + raw, err := obj.Serialize() 193 180 if err != nil { 194 181 return Hash{}, err 195 182 }
+3
obj.go
··· 40 40 type Object interface { 41 41 // ObjectType returns the object's type. 42 42 ObjectType() ObjectType 43 + // Serialize renders the object into its raw byte representation, 44 + // including the header (i.e., "type size\0"). 45 + Serialize() ([]byte, error) 43 46 } 44 47 45 48 // StoredObject describes a Git object with a known hash, such as