shithub: furgit

Download patch

ref: 399530fa393b7a23a01e1546273f9abea9c8e87a
parent: 3ec995bbe8009d1550ea3e2005e7e544aac2ad2e
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 22:22:51 EST 2026

receivepack: Add basic progress logging

--- a/receivepack/receivepack.go
+++ b/receivepack/receivepack.go
@@ -89,6 +89,7 @@
 		Refs:            opts.Refs,
 		ExistingObjects: opts.ExistingObjects,
 		ObjectsRoot:     opts.ObjectsRoot,
+		Progress:        progressWriter,
 		PromotedObjectPermissions: translatePromotedObjectPermissions(
 			opts.PromotedObjectPermissions,
 		),
--- a/receivepack/service/ingest_quarantine.go
+++ b/receivepack/service/ingest_quarantine.go
@@ -4,6 +4,7 @@
 	"os"
 
 	"codeberg.org/lindenii/furgit/format/pack/ingest"
+	"codeberg.org/lindenii/furgit/internal/utils"
 )
 
 func (service *Service) ingestQuarantine(
@@ -15,7 +16,11 @@
 		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")
+
 		result.UnpackError = "missing pack stream"
 		fillCommandErrors(result, commands, "missing pack stream")
 
@@ -23,6 +28,8 @@
 	}
 
 	if service.opts.ObjectsRoot == nil {
+		utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: objects root not configured\n")
+
 		result.UnpackError = "objects root not configured"
 		fillCommandErrors(result, commands, "objects root not configured")
 
@@ -31,6 +38,8 @@
 
 	quarantineName, quarantineRoot, err := service.createQuarantineRoot()
 	if err != nil {
+		utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: %v\n", err)
+
 		result.UnpackError = err.Error()
 		fillCommandErrors(result, commands, err.Error())
 
@@ -39,6 +48,8 @@
 
 	quarantinePackRoot, err := service.openQuarantinePackRoot(quarantineRoot)
 	if err != nil {
+		utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: %v\n", err)
+
 		result.UnpackError = err.Error()
 		fillCommandErrors(result, commands, err.Error())
 
@@ -56,6 +67,7 @@
 			FixThin:  true,
 			WriteRev: true,
 			Base:     service.opts.ExistingObjects,
+			Progress: service.opts.Progress,
 		},
 	)
 
@@ -62,6 +74,8 @@
 	_ = quarantinePackRoot.Close()
 
 	if err != nil {
+		utils.WriteProgressf(service.opts.Progress, "receiving objects: unpack failed: %v\n", err)
+
 		result.UnpackError = err.Error()
 		fillCommandErrors(result, commands, err.Error())
 
@@ -70,6 +84,12 @@
 
 		return "", nil, false
 	}
+
+	utils.WriteProgressf(
+		"receiving objects: unpack ok, %d objects (%s)\n",
+		ingested.ObjectCount,
+		ingested.PackHash,
+	)
 
 	result.Ingest = &ingested
 
--- a/receivepack/service/options.go
+++ b/receivepack/service/options.go
@@ -1,6 +1,7 @@
 package service
 
 import (
+	"io"
 	"io/fs"
 	"os"
 
@@ -20,6 +21,7 @@
 	Refs                      refstore.ReadWriteStore
 	ExistingObjects           objectstore.Store
 	ObjectsRoot               *os.Root
+	Progress                  io.Writer
 	PromotedObjectPermissions *PromotedObjectPermissions
 	Hook                      Hook
 	HookIO                    HookIO
--