ref: f04cb2e9aff390d952c9b38dafd6f57aa0371aac
parent: 88525c1dd3b5048fcdaa302b82e0d7c654c8ad06
author: Runxi Yu <me@runxiyu.org>
date: Fri Feb 20 23:04:43 EST 2026
objectstore/loose: Simplify ReadBytes* with a helper
--- a/objectstore/loose/read_bytes.go
+++ b/objectstore/loose/read_bytes.go
@@ -5,18 +5,30 @@
"codeberg.org/lindenii/furgit/objecttype"
)
-// ReadBytesFull reads a full serialized object as "type size\0content".
-func (store *Store) ReadBytesFull(id objectid.ObjectID) ([]byte, error) {+// readBytesParsed reads, inflates, and parses a loose object in one pass.
+// It returns the full raw payload and its parsed type and content.
+func (store *Store) readBytesParsed(id objectid.ObjectID) ([]byte, objecttype.Type, []byte, error) {file, err := store.openObject(id)
if err != nil {- return nil, err
+ return nil, objecttype.TypeInvalid, nil, err
}
defer func() { _ = file.Close() }()+
raw, err := decodeAll(file)
if err != nil {- return nil, err
+ return nil, objecttype.TypeInvalid, nil, err
}
- if _, _, err := parseRaw(raw); err != nil {+ ty, content, err := parseRaw(raw)
+ if err != nil {+ return nil, objecttype.TypeInvalid, nil, err
+ }
+ return raw, ty, content, nil
+}
+
+// ReadBytesFull reads a full serialized object as "type size\0content".
+func (store *Store) ReadBytesFull(id objectid.ObjectID) ([]byte, error) {+ raw, _, _, err := store.readBytesParsed(id)
+ if err != nil {return nil, err
}
return raw, nil
@@ -24,11 +36,7 @@
// 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) // Just for the size check.
+ _, ty, content, err := store.readBytesParsed(id)
if err != nil {return objecttype.TypeInvalid, nil, err
}
--
⑨