aboutsummaryrefslogtreecommitdiff
path: root/format/pack/ingest/scan.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-08 14:15:55 +0800
committerGravatar Runxi Yu2026-03-08 14:15:55 +0800
commit4a17412255e294e99f2d11e9b8458e30bbe58292 (patch)
tree7d4b83d37abad439c61a5d626cf1609c0b3727d6 /format/pack/ingest/scan.go
parentinternal/progress: Add progress meter (diff)
signatureNo signature
format/pack/ingest: Use progress API
Diffstat (limited to 'format/pack/ingest/scan.go')
-rw-r--r--format/pack/ingest/scan.go22
1 files changed, 12 insertions, 10 deletions
diff --git a/format/pack/ingest/scan.go b/format/pack/ingest/scan.go
index bb94ebc3..8fe08ac3 100644
--- a/format/pack/ingest/scan.go
+++ b/format/pack/ingest/scan.go
@@ -3,7 +3,7 @@ package ingest
import (
"fmt"
- "codeberg.org/lindenii/furgit/internal/utils"
+ "codeberg.org/lindenii/furgit/internal/progress"
"codeberg.org/lindenii/furgit/objectid"
)
@@ -21,22 +21,27 @@ func streamPackAndScan(state *ingestState) error {
state.algo.Size(),
)
- utils.BestEffortFprintf(state.opts.Progress, "validating pack header...\r")
+ writeProgress(state, "validating pack header...\r")
err = seedStreamWithPackHeader(state)
if err != nil {
return err
}
- utils.BestEffortFprintf(state.opts.Progress, "validating pack header: done.\n")
+ writeProgress(state, "validating pack header: done.\n")
state.records = make([]objectRecord, 0, state.objectCountHeader)
state.ofsDeltas = make([]ofsDeltaRef, 0, state.objectCountHeader)
state.refDeltas = make([]refDeltaRef, 0, state.objectCountHeader)
total := state.objectCountHeader
- step := progressStep(total)
- utils.BestEffortFprintf(state.opts.Progress, "receiving objects: 0%% (0/%d)\r", total)
+ meter := progress.New(progress.Options{
+ Writer: state.opts.Progress,
+ Flush: state.opts.ProgressFlush,
+ Title: "receiving objects",
+ Total: uint64(total),
+ Throughput: true,
+ })
for i := range total {
nextOffset, err := scanOneEntry(state, state.stream.consumed)
@@ -49,13 +54,10 @@ func streamPackAndScan(state *ingestState) error {
}
done := i + 1
- if done%step == 0 || done == total {
- percent := done * 100 / total
- utils.BestEffortFprintf(state.opts.Progress, "receiving objects: %3d%% (%d/%d)\r", percent, done, total)
- }
+ meter.Set(uint64(done), state.stream.consumed)
}
- utils.BestEffortFprintf(state.opts.Progress, "receiving objects: 100%% (%d/%d), done.\n", total, total)
+ meter.Stop("done")
err = state.stream.finishAndFlushTrailer(state.opts.RequireTrailingEOF)
if err != nil {