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  }