ref: ab174c473618dd3743881cf44e02c2db4d1ecd5f
dir: /object/store/packed/internal/ingest/state.go/
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
}