Fast implementation of Git in pure Go
at master 37 lines 993 B view raw
1package memory 2 3import ( 4 "codeberg.org/lindenii/furgit/objectheader" 5 "codeberg.org/lindenii/furgit/objectid" 6 "codeberg.org/lindenii/furgit/objectstore" 7 "codeberg.org/lindenii/furgit/objecttype" 8) 9 10// ReadBytesFull reads one full object, including the object header. 11func (store *Store) ReadBytesFull(id objectid.ObjectID) ([]byte, error) { 12 obj, ok := store.objects[id] 13 if !ok { 14 return nil, objectstore.ErrObjectNotFound 15 } 16 17 header, ok := objectheader.Encode(obj.ty, int64(len(obj.content))) 18 if !ok { 19 panic("failed to encode object header") 20 } 21 22 raw := make([]byte, len(header)+len(obj.content)) 23 copy(raw, header) 24 copy(raw[len(header):], obj.content) 25 26 return raw, nil 27} 28 29// ReadBytesContent reads one object body. 30func (store *Store) ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) { 31 obj, ok := store.objects[id] 32 if !ok { 33 return objecttype.TypeInvalid, nil, objectstore.ErrObjectNotFound 34 } 35 36 return obj.ty, append([]byte(nil), obj.content...), nil 37}