aboutsummaryrefslogtreecommitdiff
path: root/format/pack/ingest/scan.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-08 03:31:12 +0800
committerGravatar Runxi Yu2026-03-08 03:31:12 +0800
commit74584d2dee4f349b5b3535669fa304b95f0f6e52 (patch)
tree8ce22050c4726eeaffa29f34074bf8f874c51c7c /format/pack/ingest/scan.go
parentreceivepack: Add basic progress logging (diff)
signatureNo signature
format/pack/ingest: Add more progress
Diffstat (limited to 'format/pack/ingest/scan.go')
-rw-r--r--format/pack/ingest/scan.go15
1 files changed, 14 insertions, 1 deletions
diff --git a/format/pack/ingest/scan.go b/format/pack/ingest/scan.go
index d1252d00..a0d06dac 100644
--- a/format/pack/ingest/scan.go
+++ b/format/pack/ingest/scan.go
@@ -3,6 +3,7 @@ package ingest
import (
"fmt"
+ "codeberg.org/lindenii/furgit/internal/utils"
"codeberg.org/lindenii/furgit/objectid"
)
@@ -29,7 +30,11 @@ func streamPackAndScan(state *ingestState) error {
state.ofsDeltas = make([]ofsDeltaRef, 0, state.objectCountHeader)
state.refDeltas = make([]refDeltaRef, 0, state.objectCountHeader)
- for range state.objectCountHeader {
+ total := state.objectCountHeader
+ step := progressStep(total)
+ utils.WriteProgressf(state.opts.Progress, "receiving objects: 0%% (0/%d)\r", total)
+
+ for i := uint32(0); i < total; i++ {
nextOffset, err := scanOneEntry(state, state.stream.consumed)
if err != nil {
return err
@@ -38,8 +43,16 @@ func streamPackAndScan(state *ingestState) error {
if nextOffset != state.stream.consumed {
return fmt.Errorf("format/pack/ingest: internal stream offset mismatch")
}
+
+ done := i + 1
+ if done%step == 0 || done == total {
+ percent := done * 100 / total
+ utils.WriteProgressf(state.opts.Progress, "receiving objects: %3d%% (%d/%d)\r", percent, done, total)
+ }
}
+ utils.WriteProgressf(state.opts.Progress, "receiving objects: 100%% (%d/%d), done.\n", total, total)
+
err = state.stream.finishAndFlushTrailer(state.opts.RequireTrailingEOF)
if err != nil {
return err