aboutsummaryrefslogtreecommitdiff
path: root/object/storer/packed/read_reader.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-27 09:08:40 +0000
committerGravatar Runxi Yu2026-03-27 09:08:40 +0000
commitd7e90798170265b37ea5f980f94ca310cfda3180 (patch)
tree89921ca5cb6dd5aaefa3c0ae72352381261cb1e6 /object/storer/packed/read_reader.go
parentCONTRIBUTING: Fix submitting changes deadlines (diff)
signatureNo signature
object/store: Rename from object/storer
Diffstat (limited to 'object/storer/packed/read_reader.go')
-rw-r--r--object/storer/packed/read_reader.go103
1 files changed, 0 insertions, 103 deletions
diff --git a/object/storer/packed/read_reader.go b/object/storer/packed/read_reader.go
deleted file mode 100644
index 6b2dee73..00000000
--- a/object/storer/packed/read_reader.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package packed
-
-import (
- "bytes"
- "fmt"
- "io"
-
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
- "codeberg.org/lindenii/furgit/internal/iolimit"
- objectheader "codeberg.org/lindenii/furgit/object/header"
- objectid "codeberg.org/lindenii/furgit/object/id"
- objecttype "codeberg.org/lindenii/furgit/object/type"
-)
-
-// ReadReaderContent reads an object's type, declared content size, and content
-// stream.
-//
-// The caller must close the returned reader.
-//
-// For base pack entries, the returned reader borrows store-owned mapped pack
-// data and is only valid until the store is closed.
-//
-// Close releases reader-local resources only. It does not drain unread data for
-// additional validation. In particular, malformed trailing compressed data,
-// trailing bytes past the declared object size, and the zlib Adler-32 trailer
-// may go unverified unless the caller reads to io.EOF.
-func (store *Store) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) {
- loc, err := store.lookup(id)
- if err != nil {
- return objecttype.TypeInvalid, 0, nil, err
- }
-
- pack, meta, err := store.entryMetaAt(loc)
- if err != nil {
- return objecttype.TypeInvalid, 0, nil, err
- }
-
- if packfmt.IsBaseObjectType(meta.ty) {
- zr, err := zlibReaderAt(pack, meta.dataOffset)
- if err != nil {
- return objecttype.TypeInvalid, 0, nil, err
- }
-
- return meta.ty, meta.size, &readCloser{
- reader: iolimit.ExpectLengthReader(zr, meta.size),
- closer: zr,
- }, nil
- }
-
- ty, content, err := store.deltaResolveContent(loc)
- if err != nil {
- return objecttype.TypeInvalid, 0, nil, err
- }
-
- return ty, int64(len(content)), io.NopCloser(bytes.NewReader(content)), nil
-}
-
-// ReadReaderFull reads a full serialized object stream as "type size\0content".
-//
-// The caller must close the returned reader.
-//
-// For base pack entries, the returned reader borrows store-owned mapped pack
-// data and is only valid until the store is closed.
-//
-// Close releases reader-local resources only. It does not drain unread data for
-// additional validation. In particular, malformed trailing compressed data,
-// trailing bytes past the declared object size, and the zlib Adler-32 trailer
-// may go unverified unless the caller reads to io.EOF.
-func (store *Store) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) {
- loc, err := store.lookup(id)
- if err != nil {
- return nil, err
- }
-
- pack, meta, err := store.entryMetaAt(loc)
- if err != nil {
- return nil, err
- }
-
- if packfmt.IsBaseObjectType(meta.ty) {
- header, ok := objectheader.Encode(meta.ty, meta.size)
- if !ok {
- return nil, fmt.Errorf("objectstorer/packed: failed to encode object header for type %d", meta.ty)
- }
-
- zr, err := zlibReaderAt(pack, meta.dataOffset)
- if err != nil {
- return nil, err
- }
-
- return &readCloser{
- reader: io.MultiReader(bytes.NewReader(header), iolimit.ExpectLengthReader(zr, meta.size)),
- closer: zr,
- }, nil
- }
-
- raw, err := store.ReadBytesFull(id)
- if err != nil {
- return nil, err
- }
-
- return io.NopCloser(bytes.NewReader(raw)), nil
-}