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/resolve_all.go | |
| parent | receivepack: Add basic progress logging (diff) | |
| signature | No signature | |
format/pack/ingest: Add more progress
Diffstat (limited to 'format/pack/ingest/resolve_all.go')
| -rw-r--r-- | format/pack/ingest/resolve_all.go | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/format/pack/ingest/resolve_all.go b/format/pack/ingest/resolve_all.go index 992d87ae..e71d38d1 100644 --- a/format/pack/ingest/resolve_all.go +++ b/format/pack/ingest/resolve_all.go @@ -1,16 +1,41 @@ package ingest -import "errors" +import ( + "errors" + + "codeberg.org/lindenii/furgit/internal/utils" +) // resolveAll resolves all delta records and finalizes ObjectID/RealType for every record. func resolveAll(state *ingestState) error { state.unresolvedRefDeltas = state.unresolvedRefDeltas[:0] + var pending uint32 + for idx := range state.records { + if !state.records[idx].resolved { + pending++ + } + } + + if pending == 0 { + return nil + } + + step := progressStep(pending) + var done uint32 + utils.WriteProgressf(state.opts.Progress, "resolving deltas: 0%% (0/%d)\r", pending) + for idx := range state.records { if state.records[idx].resolved { continue } + done++ + if done%step == 0 || done == pending { + percent := done * 100 / pending + utils.WriteProgressf(state.opts.Progress, "resolving deltas: %3d%% (%d/%d)\r", percent, done, pending) + } + visiting := make(map[int]struct{}) ty, content, err := resolveRecord(state, idx, visiting) @@ -37,5 +62,7 @@ func resolveAll(state *ingestState) error { state.baseCache.add(idx, ty, content) } + utils.WriteProgressf(state.opts.Progress, "resolving deltas: 100%% (%d/%d), done.\n", pending, pending) + return nil } |
