7704a6d5c3
In https://github.com/btcsuite/btcwallet/pull/419#issuecomment-212482492 I mentioned that btcwallet should wait until btcd also switches back to upstream package paths so that duplicate packages are not included in and bloat the btcwallet binary. Even while btcd has not yet switched to the upstream flags package, this change can still be made now since it is only used by btcd's main package, which is not included in btcwallet.
113 lines
2 KiB
Go
113 lines
2 KiB
Go
// Copyright (c) 2015-2016 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/btcsuite/btcutil"
|
|
"github.com/btcsuite/btcwallet/walletdb"
|
|
_ "github.com/btcsuite/btcwallet/walletdb/bdb"
|
|
"github.com/jessevdk/go-flags"
|
|
)
|
|
|
|
const defaultNet = "mainnet"
|
|
|
|
var datadir = btcutil.AppDataDir("btcwallet", false)
|
|
|
|
// Flags.
|
|
var opts = struct {
|
|
Force bool `short:"f" description:"Force removal without prompt"`
|
|
DbPath string `long:"db" description:"Path to wallet database"`
|
|
}{
|
|
Force: false,
|
|
DbPath: filepath.Join(datadir, defaultNet, "wallet.db"),
|
|
}
|
|
|
|
func init() {
|
|
_, err := flags.Parse(&opts)
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
// Namespace keys.
|
|
var (
|
|
wtxmgrNamespace = []byte("wtxmgr")
|
|
)
|
|
|
|
func yes(s string) bool {
|
|
switch s {
|
|
case "y", "Y", "yes", "Yes":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func no(s string) bool {
|
|
switch s {
|
|
case "n", "N", "no", "No":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
os.Exit(mainInt())
|
|
}
|
|
|
|
func mainInt() int {
|
|
fmt.Println("Database path:", opts.DbPath)
|
|
_, err := os.Stat(opts.DbPath)
|
|
if os.IsNotExist(err) {
|
|
fmt.Println("Database file does not exist")
|
|
return 1
|
|
}
|
|
|
|
for !opts.Force {
|
|
fmt.Print("Drop all btcwallet transaction history? [y/N] ")
|
|
|
|
scanner := bufio.NewScanner(bufio.NewReader(os.Stdin))
|
|
if !scanner.Scan() {
|
|
// Exit on EOF.
|
|
return 0
|
|
}
|
|
err := scanner.Err()
|
|
if err != nil {
|
|
fmt.Println()
|
|
fmt.Println(err)
|
|
return 1
|
|
}
|
|
resp := scanner.Text()
|
|
if yes(resp) {
|
|
break
|
|
}
|
|
if no(resp) || resp == "" {
|
|
return 0
|
|
}
|
|
|
|
fmt.Println("Enter yes or no.")
|
|
}
|
|
|
|
db, err := walletdb.Open("bdb", opts.DbPath)
|
|
if err != nil {
|
|
fmt.Println("Failed to open database:", err)
|
|
return 1
|
|
}
|
|
defer db.Close()
|
|
fmt.Println("Dropping wtxmgr namespace")
|
|
err = db.DeleteNamespace(wtxmgrNamespace)
|
|
if err != nil && err != walletdb.ErrBucketNotFound {
|
|
fmt.Println("Failed to drop namespace:", err)
|
|
return 1
|
|
}
|
|
|
|
return 0
|
|
}
|