diff options
| author | 2026-03-05 18:24:40 +0800 | |
|---|---|---|
| committer | 2026-03-05 19:05:47 +0800 | |
| commit | 57f1818d547f2f1dca38033b4e29f62d89ef80f9 (patch) | |
| tree | 88d55ac38e2427860bf380c8cce42fcb3bb1e9ee /format/pack/ingest/ingest.go | |
| parent | internal/compress/zlib: Use flate's compression consumed counter (diff) | |
| signature | No signature | |
format/pack/ingest: Init
Diffstat (limited to 'format/pack/ingest/ingest.go')
| -rw-r--r-- | format/pack/ingest/ingest.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/format/pack/ingest/ingest.go b/format/pack/ingest/ingest.go new file mode 100644 index 00000000..5d6bbfce --- /dev/null +++ b/format/pack/ingest/ingest.go @@ -0,0 +1,49 @@ +package ingest + +import "fmt" + +// ingest initializes transaction state and executes the ingest pipeline. +func ingest(state *ingestState) (out Result, err error) { + if err := openTemporaryArtifacts(state); err != nil { + return Result{}, err + } + defer func() { + _ = closeTemporaryArtifacts(state) + if err != nil { + rollbackTemporaryArtifacts(state) + } + }() + + if err := streamPackAndScan(state); err != nil { + return Result{}, err + } + if err := resolveAll(state); err != nil { + return Result{}, err + } + if err := maybeFixThin(state); err != nil { + return Result{}, err + } + if state.thinFixed { + if err := resolveAll(state); err != nil { + return Result{}, err + } + } + if len(state.unresolvedRefDeltas) > 0 { + return Result{}, &ErrThinPackUnresolved{Count: len(state.unresolvedRefDeltas)} + } + if err := verifyResolvedRecords(state); err != nil { + return Result{}, err + } + + if err := state.packFile.Sync(); err != nil { + return Result{}, &ErrDestinationWrite{Op: fmt.Sprintf("sync pack: %v", err)} + } + if err := writeIdx(state); err != nil { + return Result{}, err + } + if err := writeRev(state); err != nil { + return Result{}, err + } + + return finalizeArtifacts(state) +} |
