diff --git a/src/cmds/restic/cmd_migrate.go b/src/cmds/restic/cmd_migrate.go index b585534a2..8fb8b320b 100644 --- a/src/cmds/restic/cmd_migrate.go +++ b/src/cmds/restic/cmd_migrate.go @@ -21,12 +21,15 @@ name is explicitely given, a list of migrations that can be applied is printed. // MigrateOptions bundles all options for the 'check' command. type MigrateOptions struct { + Force bool } var migrateOptions MigrateOptions func init() { cmdRoot.AddCommand(cmdMigrate) + f := cmdMigrate.Flags() + f.BoolVarP(&migrateOptions.Force, "force", "f", false, `apply a migration a second time`) } func checkMigrations(opts MigrateOptions, gopts GlobalOptions, repo restic.Repository) error { @@ -59,8 +62,12 @@ func applyMigrations(opts MigrateOptions, gopts GlobalOptions, repo restic.Repos } if !ok { - Warnf("migration %v cannot be applied: check failed\n", m.Name()) - continue + if !opts.Force { + Warnf("migration %v cannot be applied: check failed\nIf you want to apply this migration anyway, re-run with option --force\n", m.Name()) + continue + } + + Warnf("check for migration %v failed, continuing anyway\n", m.Name()) } Printf("applying migration %v...\n", m.Name()) diff --git a/src/restic/backend/s3/s3.go b/src/restic/backend/s3/s3.go index cb3aaf5e1..202a39baf 100644 --- a/src/restic/backend/s3/s3.go +++ b/src/restic/backend/s3/s3.go @@ -453,6 +453,11 @@ func (be *Backend) Rename(h restic.Handle, l backend.Layout) error { oldname := be.Filename(h) newname := l.Filename(h) + if oldname == newname { + debug.Log(" %v is already renamed", newname) + return nil + } + debug.Log(" %v -> %v", oldname, newname) coreClient := minio.Core{Client: be.client}