shithub: furgit

Download patch

ref: 668ce2a39f008d8b7f562621896108939d4e0608
parent: b90caf8f6606cdecd8529dc365b53584ee402d8c
author: Runxi Yu <me@runxiyu.org>
date: Sun Mar 8 11:16:13 EDT 2026

format/pack/ingest: Thin fix error handling

--- a/format/pack/ingest/thin_fix.go
+++ b/format/pack/ingest/thin_fix.go
@@ -1,10 +1,12 @@
 package ingest
 
 import (
+	"errors"
 	"fmt"
 
 	"codeberg.org/lindenii/furgit/internal/intconv"
 	"codeberg.org/lindenii/furgit/internal/progress"
+	"codeberg.org/lindenii/furgit/objectstore"
 )
 
 // maybeFixThin appends missing bases and rewrites pack header/trailer when needed.
@@ -61,13 +63,18 @@
 		Flush:  state.opts.ProgressFlush,
 		Title:  "fixing thin pack",
 		Total:  uint64(total),
-		Sparse: true,
 	})
 
-	for i, id := range baseIDs {
+	var appended uint64
+
+	for _, id := range baseIDs {
 		ty, content, err := state.opts.Base.ReadBytesContent(id)
 		if err != nil {
-			continue
+			if errors.Is(err, objectstore.ErrObjectNotFound) {
+				continue
+			}
+
+			return fmt.Errorf("format/pack/ingest: read thin base %s: %w", id, err)
 		}
 
 		_, err = appendBaseObject(state, id, ty, content)
@@ -77,8 +84,8 @@
 
 		state.thinFixed = true
 
-		done := i + 1
-		meter.Set(uint64(done), 0)
+		appended++
+		meter.Set(appended, 0)
 	}
 
 	err = rewritePackHeaderAndTrailer(state)
--