Fast implementation of Git in pure Go
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}