aboutsummaryrefslogtreecommitdiff
path: root/format/pack/ingest/resolve_all.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/resolve_all.go
parentreceivepack: Add basic progress logging (diff)
signatureNo signature
format/pack/ingest: Add more progress
Diffstat (limited to 'format/pack/ingest/resolve_all.go')
-rw-r--r--format/pack/ingest/resolve_all.go29
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
}