···173174// WriteLooseObject writes an object to the repository as a loose object.
175func (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)
190 }
191- // TODO: Consider adding serialize to the interface?
192-193 if err != nil {
194 return Hash{}, err
195 }
···173174// WriteLooseObject writes an object to the repository as a loose object.
175func (repo *Repository) WriteLooseObject(obj Object) (Hash, error) {
176+ if obj == nil {
177+ return Hash{}, ErrInvalidObject
000000000000178 }
179+ raw, err := obj.Serialize()
0180 if err != nil {
181 return Hash{}, err
182 }
+3
obj.go
···40type Object interface {
41 // ObjectType returns the object's type.
42 ObjectType() ObjectType
00043}
4445// StoredObject describes a Git object with a known hash, such as
···40type Object interface {
41 // ObjectType returns the object's type.
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)
46}
4748// StoredObject describes a Git object with a known hash, such as