aboutsummaryrefslogtreecommitdiff
path: root/object/store/packed/internal/ingest/state.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-30 14:28:13 +0000
committerGravatar Runxi Yu2026-03-30 14:28:13 +0000
commita4eeb727468a178a4de0dfc718828f26740484ac (patch)
tree4318d38d49facc80e2e2186f5919fa656be3b31f /object/store/packed/internal/ingest/state.go
parentobject/store/packed: Make store own root, algo, opts (diff)
object,store/packed{,/internal/ingest}: Move from format/packfile/ingest
Diffstat (limited to 'object/store/packed/internal/ingest/state.go')
-rw-r--r--object/store/packed/internal/ingest/state.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/object/store/packed/internal/ingest/state.go b/object/store/packed/internal/ingest/state.go
new file mode 100644
index 00000000..0412eb32
--- /dev/null
+++ b/object/store/packed/internal/ingest/state.go
@@ -0,0 +1,70 @@
+package ingest
+
+import (
+ "io"
+ "os"
+
+ objectid "codeberg.org/lindenii/furgit/object/id"
+)
+
+const (
+ defaultDeltaBaseCacheMaxBytes = 32 << 20
+)
+
+// ingestState holds mutable state for one Ingest call.
+type ingestState struct {
+ src io.Reader
+ destination *os.Root
+ algo objectid.Algorithm
+ opts Options
+
+ packHeaderRaw [packHeaderSize]byte
+
+ packFile *os.File
+ packTmpName string
+ idxFile *os.File
+ idxTmpName string
+ revFile *os.File
+ revTmpName string
+
+ stream *streamScanner
+
+ records []objectRecord
+ ofsDeltas []ofsDeltaRef
+ refDeltas []refDeltaRef
+ unresolvedRefDeltas []int
+ offsetToRecord map[uint64]int
+ objectToRecord map[objectid.ObjectID]int
+
+ baseCache *deltaBaseCache
+ packHash objectid.ObjectID
+
+ objectCountHeader uint32
+ thinFixed bool
+}
+
+// newIngestState constructs one call-local ingest state.
+func newIngestState(
+ src io.Reader,
+ destination *os.Root,
+ algo objectid.Algorithm,
+ opts Options,
+ header packHeader,
+ headerRaw [packHeaderSize]byte,
+) (*ingestState, error) {
+ if algo.Size() == 0 {
+ return nil, objectid.ErrInvalidAlgorithm
+ }
+
+ return &ingestState{
+ src: src,
+ destination: destination,
+ algo: algo,
+ opts: opts,
+ packHeaderRaw: headerRaw,
+ objectCountHeader: header.ObjectCount,
+ offsetToRecord: make(map[uint64]int),
+ objectToRecord: make(map[objectid.ObjectID]int),
+ baseCache: newDeltaBaseCache(defaultDeltaBaseCacheMaxBytes),
+ }, nil
+}