ref: cb207dc2c9ac9218f4e1e75ec3aa46616eaa6c87
parent: 74584d2dee4f349b5b3535669fa304b95f0f6e52
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 22:40:00 EST 2026
receivepack/service, format/pack/ingest: Progress uniform
--- a/format/pack/ingest/ingest.go
+++ b/format/pack/ingest/ingest.go
@@ -51,7 +51,7 @@
return Result{}, err}
- utils.WriteProgressf(state.opts.Progress, "writing index: start\n")
+ utils.WriteProgressf(state.opts.Progress, "writing index...\r")
err = state.packFile.Sync()
if err != nil { return Result{}, &DestinationWriteError{Op: fmt.Sprintf("sync pack: %v", err)}@@ -61,10 +61,10 @@
if err != nil { return Result{}, err}
- utils.WriteProgressf(state.opts.Progress, "writing index: done\n")
+ utils.WriteProgressf(state.opts.Progress, "writing index: done.\n")
if state.opts.WriteRev {- utils.WriteProgressf(state.opts.Progress, "writing reverse index: start\n")
+ utils.WriteProgressf(state.opts.Progress, "writing reverse index...\r")
}
err = writeRev(state)
if err != nil {@@ -71,7 +71,7 @@
return Result{}, err}
if state.opts.WriteRev {- utils.WriteProgressf(state.opts.Progress, "writing reverse index: done\n")
+ utils.WriteProgressf(state.opts.Progress, "writing reverse index: done.\n")
}
return finalizeArtifacts(state)
--- a/format/pack/ingest/scan.go
+++ b/format/pack/ingest/scan.go
@@ -21,10 +21,12 @@
state.algo.Size(),
)
+ utils.WriteProgressf(state.opts.Progress, "validating pack header...\r")
err = readAndValidatePackHeader(state)
if err != nil {return err
}
+ utils.WriteProgressf(state.opts.Progress, "validating pack header: done.\n")
state.records = make([]objectRecord, 0, state.objectCountHeader)
state.ofsDeltas = make([]ofsDeltaRef, 0, state.objectCountHeader)
--- a/receivepack/service/apply.go
+++ b/receivepack/service/apply.go
@@ -1,30 +1,38 @@
package service
import (
+ "codeberg.org/lindenii/furgit/internal/utils"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/refstore"
)
func (service *Service) applyAtomic(result *Result, commands []Command) error {+ total := len(commands)
+ utils.WriteProgressf(service.opts.Progress, "updating refs: 0/%d\r", total)
+
tx, err := service.opts.Refs.BeginTransaction()
if err != nil {return err
}
- for _, command := range commands {+ for i, command := range commands {err = queueWriteTransaction(tx, command)
if err != nil {_ = tx.Abort()
fillCommandErrors(result, commands, err.Error())
+ utils.WriteProgressf(service.opts.Progress, "updating refs: failed at %d/%d\n", i+1, total)
return nil
}
+
+ utils.WriteProgressf(service.opts.Progress, "updating refs: %d/%d\r", i+1, total)
}
err = tx.Commit()
if err != nil {fillCommandErrors(result, commands, err.Error())
+ utils.WriteProgressf(service.opts.Progress, "updating refs: failed at commit\n")
return nil
}
@@ -33,11 +41,15 @@
for _, command := range commands {result.Commands = append(result.Commands, successCommandResult(command))
}
+ utils.WriteProgressf(service.opts.Progress, "updating refs: done.\n")
return nil
}
func (service *Service) applyBatch(result *Result, commands []Command) error {+ total := len(commands)
+ utils.WriteProgressf(service.opts.Progress, "updating refs...\r")
+
batch, err := service.opts.Refs.BeginBatch()
if err != nil {return err
@@ -49,6 +61,8 @@
batchResults, err := batch.Apply()
if err != nil && len(batchResults) == 0 {+ utils.WriteProgressf(service.opts.Progress, "updating refs: failed at apply\n")
+
return err
}
@@ -63,9 +77,11 @@
}
result.Commands = append(result.Commands, item)
+ utils.WriteProgressf(service.opts.Progress, "updating refs: %d/%d\r", i+1, total)
}
result.Applied = appliedAny
+ utils.WriteProgressf(service.opts.Progress, "updating refs: done.\n")
return nil
}
--- a/receivepack/service/execute.go
+++ b/receivepack/service/execute.go
@@ -3,6 +3,8 @@
import (
"context"
"os"
+
+ "codeberg.org/lindenii/furgit/internal/utils"
)
// Execute validates one receive-pack request, optionally ingests its pack into
@@ -78,13 +80,18 @@
if req.PackExpected {// Git migrates quarantined objects into permanent storage immediately
// before starting ref updates.
+ utils.WriteProgressf(service.opts.Progress, "promoting quarantine...\r")
err = service.promoteQuarantine(quarantineName, quarantineRoot)
if err != nil {+ utils.WriteProgressf(service.opts.Progress, "promoting quarantine: failed: %v\n", err)
+
result.UnpackError = err.Error()
fillCommandErrors(result, req.Commands, err.Error())
return result, nil
}
+
+ utils.WriteProgressf(service.opts.Progress, "promoting quarantine: done.\n")
}
if req.Atomic {--- a/receivepack/service/ingest_quarantine.go
+++ b/receivepack/service/ingest_quarantine.go
@@ -16,8 +16,6 @@
return "", nil, true
}
- utils.WriteProgressf(service.opts.Progress, "receiving objects: ingesting pack\n")
-
if req.Pack == nil {utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: missing pack stream\n")
@@ -36,6 +34,7 @@
return "", nil, false
}
+ utils.WriteProgressf(service.opts.Progress, "creating quarantine...\r")
quarantineName, quarantineRoot, err := service.createQuarantineRoot()
if err != nil {utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: %v\n", err)
@@ -58,6 +57,8 @@
return "", nil, false
}
+ utils.WriteProgressf(service.opts.Progress, "creating quarantine: done.\n")
+ utils.WriteProgressf(service.opts.Progress, "receiving objects: unpacking...\r")
ingested, err := ingest.Ingest(
req.Pack,
@@ -85,12 +86,7 @@
return "", nil, false
}
- utils.WriteProgressf(
- service.opts.Progress,
- "receiving objects: unpack ok, %d objects (%s)\n",
- ingested.ObjectCount,
- ingested.PackHash,
- )
+ utils.WriteProgressf(service.opts.Progress, "receiving objects: unpacking: done (%d objects, %s).\n", ingested.ObjectCount, ingested.PackHash)
result.Ingest = &ingested
--- a/receivepack/service/run_hook.go
+++ b/receivepack/service/run_hook.go
@@ -1,7 +1,11 @@
package service
-import "context"
+import (
+ "context"
+ "codeberg.org/lindenii/furgit/internal/utils"
+)
+
func (service *Service) runHook(
ctx context.Context,
req *Request,
@@ -26,8 +30,12 @@
return allowedCommands, allowedIndices, rejected, true, ""
}
+ utils.WriteProgressf(service.opts.Progress, "running hooks...\r")
+
quarantinedObjects, err := service.openQuarantinedObjects(quarantineName)
if err != nil {+ utils.WriteProgressf(service.opts.Progress, "running hooks: failed: %v\n", err)
+
return nil, nil, nil, false, err.Error()
}
@@ -44,10 +52,14 @@
IO: service.opts.HookIO,
})
if err != nil {+ utils.WriteProgressf(service.opts.Progress, "running hooks: failed: %v\n", err)
+
return nil, nil, nil, false, err.Error()
}
if len(decisions) != len(commands) {+ utils.WriteProgressf(service.opts.Progress, "running hooks: failed: wrong decision count\n")
+
return nil, nil, nil, false, "hook returned wrong number of update decisions"
}
@@ -69,6 +81,13 @@
rejected[index] = message
}
+
+ utils.WriteProgressf(
+ service.opts.Progress,
+ "running hooks: done (%d/%d accepted).\n",
+ len(allowedCommands),
+ len(commands),
+ )
return allowedCommands, allowedIndices, rejected, true, ""
}
--
⑨