github.com/prysmaticlabs/prysm@v1.4.4/slasher/db/restore.go (about) 1 package db 2 3 import ( 4 "os" 5 "path" 6 "strings" 7 8 "github.com/pkg/errors" 9 "github.com/prysmaticlabs/prysm/shared/cmd" 10 "github.com/prysmaticlabs/prysm/shared/fileutil" 11 "github.com/prysmaticlabs/prysm/shared/promptutil" 12 "github.com/prysmaticlabs/prysm/slasher/db/kv" 13 "github.com/urfave/cli/v2" 14 ) 15 16 const dbExistsYesNoPrompt = "A database file already exists in the target directory. " + 17 "Are you sure that you want to overwrite it? [y/n]" 18 19 func restore(cliCtx *cli.Context) error { 20 sourceFile := cliCtx.String(cmd.RestoreSourceFileFlag.Name) 21 targetDir := cliCtx.String(cmd.RestoreTargetDirFlag.Name) 22 23 restoreDir := path.Join(targetDir, kv.SlasherDbDirName) 24 if fileutil.FileExists(path.Join(restoreDir, kv.DatabaseFileName)) { 25 resp, err := promptutil.ValidatePrompt( 26 os.Stdin, dbExistsYesNoPrompt, promptutil.ValidateYesOrNo, 27 ) 28 if err != nil { 29 return errors.Wrap(err, "could not validate choice") 30 } 31 if strings.EqualFold(resp, "n") { 32 log.Info("Restore aborted") 33 return nil 34 } 35 } 36 if err := fileutil.MkdirAll(restoreDir); err != nil { 37 return err 38 } 39 if err := fileutil.CopyFile(sourceFile, path.Join(restoreDir, kv.DatabaseFileName)); err != nil { 40 return err 41 } 42 43 log.Info("Restore completed successfully") 44 return nil 45 }