aboutsummaryrefslogtreecommitdiff
path: root/format/pack/ingest/rev_write.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-08 14:25:33 +0800
committerGravatar Runxi Yu2026-03-08 14:33:27 +0800
commitb90caf8f6606cdecd8529dc365b53584ee402d8c (patch)
tree83948ab366637e20cbce812b63f10448e9ced2f1 /format/pack/ingest/rev_write.go
parentTODO: Flush (diff)
signatureNo signature
format/pack/ingest: Write index progress too v0.1.79
Diffstat (limited to 'format/pack/ingest/rev_write.go')
-rw-r--r--format/pack/ingest/rev_write.go26
1 files changed, 25 insertions, 1 deletions
diff --git a/format/pack/ingest/rev_write.go b/format/pack/ingest/rev_write.go
index 5a2f5375..9ed8dc6c 100644
--- a/format/pack/ingest/rev_write.go
+++ b/format/pack/ingest/rev_write.go
@@ -5,6 +5,7 @@ import (
"slices"
"codeberg.org/lindenii/furgit/internal/intconv"
+ "codeberg.org/lindenii/furgit/internal/progress"
)
const (
@@ -33,6 +34,7 @@ func writeRev(state *ingestState) error {
}
var scratch [8]byte
+ writeProgress(state, "writing reverse index header...\r")
binary.BigEndian.PutUint32(scratch[:4], revMagic)
err = writeAndHash(state.revFile, hashImpl, scratch[:4])
@@ -53,6 +55,15 @@ func writeRev(state *ingestState) error {
if err != nil {
return err
}
+ writeProgress(state, "writing reverse index header: done.\n")
+
+ entriesMeter := progress.New(progress.Options{
+ Writer: state.opts.Progress,
+ Flush: state.opts.ProgressFlush,
+ Title: "writing reverse index entries",
+ Total: uint64(len(packOrder)),
+ })
+ var entriesDone uint64
for _, recordIdx := range packOrder {
recordPos, err := intconv.IntToUint32(recordToIdxPos[recordIdx])
@@ -66,7 +77,14 @@ func writeRev(state *ingestState) error {
if err != nil {
return err
}
+ entriesDone++
+ entriesMeter.Set(entriesDone, 0)
}
+ if entriesDone > 0 {
+ entriesMeter.Stop("done")
+ }
+
+ writeProgress(state, "writing reverse index trailer...\r")
err = writeAndHash(state.revFile, hashImpl, state.packHash.Bytes())
if err != nil {
@@ -80,7 +98,13 @@ func writeRev(state *ingestState) error {
return err
}
- return state.revFile.Sync()
+ err = state.revFile.Sync()
+ if err != nil {
+ return err
+ }
+ writeProgress(state, "writing reverse index trailer: done.\n")
+
+ return nil
}
// buildPackOrder returns record indexes sorted by pack offset.