diff options
| author | 2026-03-08 03:31:12 +0800 | |
|---|---|---|
| committer | 2026-03-08 03:31:12 +0800 | |
| commit | 74584d2dee4f349b5b3535669fa304b95f0f6e52 (patch) | |
| tree | 8ce22050c4726eeaffa29f34074bf8f874c51c7c /format/pack/ingest/scan.go | |
| parent | receivepack: Add basic progress logging (diff) | |
| signature | No signature | |
format/pack/ingest: Add more progress
Diffstat (limited to 'format/pack/ingest/scan.go')
| -rw-r--r-- | format/pack/ingest/scan.go | 15 |
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 |
