From e7d3a4ae510d36e861e8ea1a1fe40f8d62b76d28 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sat, 30 May 2026 10:15:16 +0200 Subject: [PATCH] repository: repair pack: move pack reupload to helper --- internal/repository/repair_pack.go | 43 +++++++++++++++++------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/internal/repository/repair_pack.go b/internal/repository/repair_pack.go index 0c9d3a43f..fc6775e92 100644 --- a/internal/repository/repair_pack.go +++ b/internal/repository/repair_pack.go @@ -19,27 +19,15 @@ func RepairPacks(ctx context.Context, repo *Repository, ids restic.IDSet, printe // examine all data the indexes have for the pack file for b := range repo.ListPacksFromIndex(ctx, ids) { blobs := b.Blobs - if len(blobs) == 0 { + if len(blobs) != 0 { + err := reuploadBlobsFromPack(ctx, repo, b.PackID, blobs, printer, uploader) + if err != nil { + return err + } + } else { printer.E("no blobs found for pack %v", b.PackID) - bar.Add(1) - continue } - err := repo.LoadBlobsFromPack(ctx, b.PackID, blobs, func(blob restic.BlobHandle, buf []byte, err error) error { - if err != nil { - printer.E("failed to load blob %v: %v", blob.ID, err) - return nil - } - id, _, _, err := uploader.SaveBlob(ctx, blob.Type, buf, restic.ID{}, true) - if !id.Equal(blob.ID) { - panic("pack id mismatch during upload") - } - return err - }) - // ignore truncated file parts - if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) { - return err - } bar.Add(1) } return nil @@ -64,3 +52,22 @@ func RepairPacks(ctx context.Context, repo *Repository, ids restic.IDSet, printe return nil } + +func reuploadBlobsFromPack(ctx context.Context, repo *Repository, packID restic.ID, blobs restic.Blobs, printer progress.Printer, uploader restic.BlobSaverWithAsync) error { + err := repo.LoadBlobsFromPack(ctx, packID, blobs, func(blob restic.BlobHandle, buf []byte, err error) error { + if err != nil { + printer.E("failed to load blob %v: %v", blob.ID, err) + return nil + } + id, _, _, err := uploader.SaveBlob(ctx, blob.Type, buf, restic.ID{}, true) + if !id.Equal(blob.ID) { + panic("pack id mismatch during upload") + } + return err + }) + // ignore truncated file parts + if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) { + return err + } + return nil +}