diff options
| author | 2026-02-21 03:46:50 +0800 | |
|---|---|---|
| committer | 2026-02-21 03:46:50 +0800 | |
| commit | 27ee98e7a9a8693db59e755739e10c1c1ba852b4 (patch) | |
| tree | 2b69d6912851d36b06c0a795391120d204605ffe /objectstore/loose/read_bytes.go | |
| parent | objectstore: ReadReaderContent should have an advisory declared length (diff) | |
| signature | No signature | |
objectstore/loose: Add loose backend
Diffstat (limited to 'objectstore/loose/read_bytes.go')
| -rw-r--r-- | objectstore/loose/read_bytes.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/objectstore/loose/read_bytes.go b/objectstore/loose/read_bytes.go new file mode 100644 index 00000000..4d1cb439 --- /dev/null +++ b/objectstore/loose/read_bytes.go @@ -0,0 +1,29 @@ +package loose + +import ( + "codeberg.org/lindenii/furgit/objectid" + "codeberg.org/lindenii/furgit/objecttype" +) + +// ReadBytesFull reads a full serialized object as "type size\0content". +func (store *Store) ReadBytesFull(id objectid.ObjectID) ([]byte, error) { + file, err := store.openObject(id) + if err != nil { + return nil, err + } + defer func() { _ = file.Close() }() + return decodeAll(file) +} + +// ReadBytesContent reads an object's type and content bytes. +func (store *Store) ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) { + raw, err := store.ReadBytesFull(id) + if err != nil { + return objecttype.TypeInvalid, nil, err + } + ty, content, err := parseRaw(raw) + if err != nil { + return objecttype.TypeInvalid, nil, err + } + return ty, content, nil +} |
