diff --git a/cmd/geth/main.go b/cmd/geth/main.go index b103477816..7db175eb92 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -549,13 +549,22 @@ func exportchain(ctx *cli.Context) { } func removeDb(ctx *cli.Context) { - fmt.Println("Removing chain and state databases...") - start := time.Now() + confirm, err := readConfirm("Remove local databases?") + if err != nil { + utils.Fatalf("%v", err) + } - os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "blockchain")) - os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "state")) + if confirm { + fmt.Println("Removing chain and state databases...") + start := time.Now() - fmt.Printf("Removed in %v\n", time.Since(start)) + os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "blockchain")) + os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "state")) + + fmt.Printf("Removed in %v\n", time.Since(start)) + } else { + fmt.Println("Operation aborted") + } } func upgradeDb(ctx *cli.Context) { @@ -682,6 +691,32 @@ func hashish(x string) bool { return err != nil } +func readConfirm(prompt string) (bool, error) { + var ( + input string + err error + ) + prompt = prompt + " [y/N] " + + if liner.TerminalSupported() { + lr := liner.NewLiner() + defer lr.Close() + input, err = lr.Prompt(prompt) + } else { + fmt.Print(prompt) + input, err = bufio.NewReader(os.Stdin).ReadString('\n') + fmt.Println() + } + + if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" { + return true, nil + } else { + return false, nil + } + + return false, err +} + func readPassword(prompt string, warnTerm bool) (string, error) { if liner.TerminalSupported() { lr := liner.NewLiner()