2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-11 15:51:02 +00:00

debug: Add switch to upload blobs extracted by debug examine

This simplifies salvaging a damaged pack file. Reuploading tree blobs
was previously not possible.
This commit is contained in:
Michael Eischer 2022-04-10 19:35:24 +02:00
parent 9af499d8a4
commit 2d6a943911

View File

@ -53,12 +53,14 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
var tryRepair bool var tryRepair bool
var repairByte bool var repairByte bool
var extractPack bool var extractPack bool
var reuploadBlobs bool
func init() { func init() {
cmdRoot.AddCommand(cmdDebug) cmdRoot.AddCommand(cmdDebug)
cmdDebug.AddCommand(cmdDebugDump) cmdDebug.AddCommand(cmdDebugDump)
cmdDebug.AddCommand(cmdDebugExamine) cmdDebug.AddCommand(cmdDebugExamine)
cmdDebugExamine.Flags().BoolVar(&extractPack, "extract-pack", false, "write blobs to the current directory") cmdDebugExamine.Flags().BoolVar(&extractPack, "extract-pack", false, "write blobs to the current directory")
cmdDebugExamine.Flags().BoolVar(&reuploadBlobs, "reupload-blobs", false, "reupload blobs to the repository")
cmdDebugExamine.Flags().BoolVar(&tryRepair, "try-repair", false, "try to repair broken blobs with single bit flips") cmdDebugExamine.Flags().BoolVar(&tryRepair, "try-repair", false, "try to repair broken blobs with single bit flips")
cmdDebugExamine.Flags().BoolVar(&repairByte, "repair-byte", false, "try to repair broken blobs by trying bytes") cmdDebugExamine.Flags().BoolVar(&repairByte, "repair-byte", false, "try to repair broken blobs by trying bytes")
} }
@ -383,6 +385,20 @@ func loadBlobs(ctx context.Context, repo restic.Repository, pack restic.ID, list
return err return err
} }
} }
if reuploadBlobs {
_, _, err := repo.SaveBlob(ctx, blob.Type, plaintext, id, true)
if err != nil {
return err
}
Printf(" uploaded %v %v\n", blob.Type, id)
}
}
if reuploadBlobs {
err := repo.Flush(ctx)
if err != nil {
return err
}
} }
return nil return nil