diff options
| -rw-r--r-- | format/pack/ingest/ingest.go | 8 | ||||
| -rw-r--r-- | format/pack/ingest/scan.go | 2 | ||||
| -rw-r--r-- | receivepack/service/apply.go | 18 | ||||
| -rw-r--r-- | receivepack/service/execute.go | 7 | ||||
| -rw-r--r-- | receivepack/service/ingest_quarantine.go | 12 | ||||
| -rw-r--r-- | receivepack/service/run_hook.go | 21 |
6 files changed, 54 insertions, 14 deletions
diff --git a/format/pack/ingest/ingest.go b/format/pack/ingest/ingest.go index 5f204c2b..e503b285 100644 --- a/format/pack/ingest/ingest.go +++ b/format/pack/ingest/ingest.go @@ -51,7 +51,7 @@ func ingest(state *ingestState) (out Result, err error) { 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,17 +61,17 @@ func ingest(state *ingestState) (out Result, err error) { 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 { 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) diff --git a/format/pack/ingest/scan.go b/format/pack/ingest/scan.go index a0d06dac..94251cb9 100644 --- a/format/pack/ingest/scan.go +++ b/format/pack/ingest/scan.go @@ -21,10 +21,12 @@ func streamPackAndScan(state *ingestState) error { 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) diff --git a/receivepack/service/apply.go b/receivepack/service/apply.go index f802e0e8..0f9e07f9 100644 --- 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 @@ func (service *Service) applyAtomic(result *Result, commands []Command) error { 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 @@ func (service *Service) applyBatch(result *Result, commands []Command) error { 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 @@ func (service *Service) applyBatch(result *Result, commands []Command) error { } 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 } diff --git a/receivepack/service/execute.go b/receivepack/service/execute.go index 14468799..20a67763 100644 --- a/receivepack/service/execute.go +++ b/receivepack/service/execute.go @@ -3,6 +3,8 @@ package service import ( "context" "os" + + "codeberg.org/lindenii/furgit/internal/utils" ) // Execute validates one receive-pack request, optionally ingests its pack into @@ -78,13 +80,18 @@ func (service *Service) Execute(ctx context.Context, req *Request) (*Result, err 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 { diff --git a/receivepack/service/ingest_quarantine.go b/receivepack/service/ingest_quarantine.go index 8e592bb9..2956c51e 100644 --- a/receivepack/service/ingest_quarantine.go +++ b/receivepack/service/ingest_quarantine.go @@ -16,8 +16,6 @@ func (service *Service) ingestQuarantine( 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 @@ func (service *Service) ingestQuarantine( 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 @@ func (service *Service) ingestQuarantine( 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 @@ func (service *Service) ingestQuarantine( 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 diff --git a/receivepack/service/run_hook.go b/receivepack/service/run_hook.go index 3c76906e..1c265f52 100644 --- a/receivepack/service/run_hook.go +++ b/receivepack/service/run_hook.go @@ -1,6 +1,10 @@ package service -import "context" +import ( + "context" + + "codeberg.org/lindenii/furgit/internal/utils" +) func (service *Service) runHook( ctx context.Context, @@ -26,8 +30,12 @@ func (service *Service) runHook( 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 @@ func (service *Service) runHook( 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" } @@ -70,5 +82,12 @@ func (service *Service) runHook( rejected[index] = message } + utils.WriteProgressf( + service.opts.Progress, + "running hooks: done (%d/%d accepted).\n", + len(allowedCommands), + len(commands), + ) + return allowedCommands, allowedIndices, rejected, true, "" } |
