Browse Source

Add user confirmation for removedb

Taylor Gerring 10 years ago
parent
commit
36a4ba3248
1 changed files with 40 additions and 5 deletions
  1. 40 5
      cmd/geth/main.go

+ 40 - 5
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()