Merge pull request #1033 from tgerring/issue1010
Add "removedb" command to Geth
This commit is contained in:
commit
d6adadc5e3
@ -383,7 +383,7 @@ func (js *jsre) unlock(call otto.FunctionCall) otto.Value {
|
|||||||
var passphrase string
|
var passphrase string
|
||||||
if arg.IsUndefined() {
|
if arg.IsUndefined() {
|
||||||
fmt.Println("Please enter a passphrase now.")
|
fmt.Println("Please enter a passphrase now.")
|
||||||
passphrase, err = readPassword("Passphrase: ", true)
|
passphrase, err = utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
@ -410,12 +410,12 @@ func (js *jsre) newAccount(call otto.FunctionCall) otto.Value {
|
|||||||
if arg.IsUndefined() {
|
if arg.IsUndefined() {
|
||||||
fmt.Println("The new account will be encrypted with a passphrase.")
|
fmt.Println("The new account will be encrypted with a passphrase.")
|
||||||
fmt.Println("Please enter a passphrase now.")
|
fmt.Println("Please enter a passphrase now.")
|
||||||
auth, err := readPassword("Passphrase: ", true)
|
auth, err := utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
}
|
}
|
||||||
confirm, err := readPassword("Repeat Passphrase: ", false)
|
confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -44,7 +43,6 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/mattn/go-colorable"
|
"github.com/mattn/go-colorable"
|
||||||
"github.com/mattn/go-isatty"
|
"github.com/mattn/go-isatty"
|
||||||
"github.com/peterh/liner"
|
|
||||||
)
|
)
|
||||||
import _ "net/http/pprof"
|
import _ "net/http/pprof"
|
||||||
|
|
||||||
@ -230,6 +228,11 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
|
|||||||
Name: "upgradedb",
|
Name: "upgradedb",
|
||||||
Usage: "upgrade chainblock database",
|
Usage: "upgrade chainblock database",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Action: removeDb,
|
||||||
|
Name: "removedb",
|
||||||
|
Usage: "Remove blockchain and state databases",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
app.Flags = []cli.Flag{
|
app.Flags = []cli.Flag{
|
||||||
utils.IdentityFlag,
|
utils.IdentityFlag,
|
||||||
@ -421,12 +424,12 @@ func getPassPhrase(ctx *cli.Context, desc string, confirmation bool) (passphrase
|
|||||||
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
|
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
|
||||||
if len(passfile) == 0 {
|
if len(passfile) == 0 {
|
||||||
fmt.Println(desc)
|
fmt.Println(desc)
|
||||||
auth, err := readPassword("Passphrase: ", true)
|
auth, err := utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("%v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
if confirmation {
|
if confirmation {
|
||||||
confirm, err := readPassword("Repeat Passphrase: ", false)
|
confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("%v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
@ -543,6 +546,25 @@ func exportchain(ctx *cli.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeDb(ctx *cli.Context) {
|
||||||
|
confirm, err := utils.PromptConfirm("Remove local databases?")
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if confirm {
|
||||||
|
fmt.Println("Removing chain and state databases...")
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
|
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) {
|
func upgradeDb(ctx *cli.Context) {
|
||||||
fmt.Println("Upgrade blockchain DB")
|
fmt.Println("Upgrade blockchain DB")
|
||||||
|
|
||||||
@ -666,18 +688,3 @@ func hashish(x string) bool {
|
|||||||
_, err := strconv.Atoi(x)
|
_, err := strconv.Atoi(x)
|
||||||
return err != nil
|
return err != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readPassword(prompt string, warnTerm bool) (string, error) {
|
|
||||||
if liner.TerminalSupported() {
|
|
||||||
lr := liner.NewLiner()
|
|
||||||
defer lr.Close()
|
|
||||||
return lr.PasswordPrompt(prompt)
|
|
||||||
}
|
|
||||||
if warnTerm {
|
|
||||||
fmt.Println("!! Unsupported terminal, password will be echoed.")
|
|
||||||
}
|
|
||||||
fmt.Print(prompt)
|
|
||||||
input, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
|
||||||
fmt.Println()
|
|
||||||
return input, err
|
|
||||||
}
|
|
||||||
|
@ -22,11 +22,13 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
@ -35,6 +37,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"github.com/peterh/liner"
|
||||||
)
|
)
|
||||||
|
|
||||||
var interruptCallbacks = []func(os.Signal){}
|
var interruptCallbacks = []func(os.Signal){}
|
||||||
@ -71,18 +74,45 @@ func openLogFile(Datadir string, filename string) *os.File {
|
|||||||
return file
|
return file
|
||||||
}
|
}
|
||||||
|
|
||||||
func confirm(message string) bool {
|
func PromptConfirm(prompt string) (bool, error) {
|
||||||
fmt.Println(message, "Are you sure? (y/n)")
|
var (
|
||||||
var r string
|
input string
|
||||||
fmt.Scanln(&r)
|
err error
|
||||||
for ; ; fmt.Scanln(&r) {
|
)
|
||||||
if r == "n" || r == "y" {
|
prompt = prompt + " [y/N] "
|
||||||
break
|
|
||||||
} else {
|
if liner.TerminalSupported() {
|
||||||
fmt.Printf("Yes or no? (%s)", r)
|
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()
|
||||||
}
|
}
|
||||||
return r == "y"
|
|
||||||
|
if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" {
|
||||||
|
return true, nil
|
||||||
|
} else {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func PromptPassword(prompt string, warnTerm bool) (string, error) {
|
||||||
|
if liner.TerminalSupported() {
|
||||||
|
lr := liner.NewLiner()
|
||||||
|
defer lr.Close()
|
||||||
|
return lr.PasswordPrompt(prompt)
|
||||||
|
}
|
||||||
|
if warnTerm {
|
||||||
|
fmt.Println("!! Unsupported terminal, password will be echoed.")
|
||||||
|
}
|
||||||
|
fmt.Print(prompt)
|
||||||
|
input, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||||
|
fmt.Println()
|
||||||
|
return input, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func initDataDir(Datadir string) {
|
func initDataDir(Datadir string) {
|
||||||
|
Loading…
Reference in New Issue
Block a user