Skip to content

Commit

Permalink
Merge pull request #3728 from MichaelEischer/debug-examine-upload
Browse files Browse the repository at this point in the history
Add support to reupload blobs in `debug examine`
  • Loading branch information
fd0 committed Apr 30, 2022
2 parents ffbd48c + 95bcc9e commit fb5b937
Showing 1 changed file with 29 additions and 7 deletions.
36 changes: 29 additions & 7 deletions cmd/restic/cmd_debug.go
Expand Up @@ -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 repairByte bool
var extractPack bool
var reuploadBlobs bool

func init() {
cmdRoot.AddCommand(cmdDebug)
cmdDebug.AddCommand(cmdDebugDump)
cmdDebug.AddCommand(cmdDebugExamine)
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(&repairByte, "repair-byte", false, "try to repair broken blobs by trying bytes")
}
Expand Down Expand Up @@ -383,6 +385,20 @@ func loadBlobs(ctx context.Context, repo restic.Repository, pack restic.ID, list
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
Expand Down Expand Up @@ -411,12 +427,23 @@ func storePlainBlob(id restic.ID, prefix string, plain []byte) error {
}

func runDebugExamine(gopts GlobalOptions, args []string) error {
repo, err := OpenRepository(gopts)
if err != nil {
return err
}

ids := make([]restic.ID, 0)
for _, name := range args {
id, err := restic.ParseID(name)
if err != nil {
Warnf("error: %v\n", err)
continue
name, err = restic.Find(gopts.ctx, repo.Backend(), restic.PackFile, name)
if err == nil {
id, err = restic.ParseID(name)
}
if err != nil {
Warnf("error: %v\n", err)
continue
}
}
ids = append(ids, id)
}
Expand All @@ -425,11 +452,6 @@ func runDebugExamine(gopts GlobalOptions, args []string) error {
return errors.Fatal("no pack files to examine")
}

repo, err := OpenRepository(gopts)
if err != nil {
return err
}

if !gopts.NoLock {
lock, err := lockRepo(gopts.ctx, repo)
defer unlockRepo(lock)
Expand Down

0 comments on commit fb5b937

Please sign in to comment.