From 8a2299c1e1767dbcfd8ca2e90dfa9aa94d1f04fd Mon Sep 17 00:00:00 2001 From: David Hill <dhill@mindcry.org> Date: Thu, 10 Oct 2013 13:58:11 -0400 Subject: [PATCH] improve dropafter as with showblock --- util/dropafter/dropafter.go | 54 ++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/util/dropafter/dropafter.go b/util/dropafter/dropafter.go index 0a6b5dae..41bd04a5 100644 --- a/util/dropafter/dropafter.go +++ b/util/dropafter/dropafter.go @@ -6,11 +6,11 @@ package main import ( "errors" - "flag" "fmt" "github.com/conformal/btcdb" _ "github.com/conformal/btcdb/ldb" "github.com/conformal/btcwire" + "github.com/conformal/go-flags" "github.com/conformal/seelog" "os" "path/filepath" @@ -19,6 +19,13 @@ import ( type ShaHash btcwire.ShaHash +type config struct { + DataDir string `short:"b" long:"datadir" description:"Directory to store data"` + DbType string `long:"dbtype" description:"Database backend"` + TestNet3 bool `long:"testnet" description:"Use the test network"` + ShaString string `short:"s" description:"Block SHA to process" required:"true"` +} + var log seelog.LoggerInterface const ( @@ -27,15 +34,18 @@ const ( ) func main() { - var err error - var dbType string - var datadir string - var shastring string - flag.StringVar(&dbType, "dbtype", "", "Database backend to use for the Block Chain") - flag.StringVar(&datadir, "datadir", "", "Directory to store data") - flag.StringVar(&shastring, "s", "", "Block sha to process") - - flag.Parse() + cfg := config{ + DbType: "leveldb", + DataDir: filepath.Join(btcdHomeDir(), "data"), + } + parser := flags.NewParser(&cfg, flags.Default) + _, err := parser.Parse() + if err != nil { + if e, ok := err.(*flags.Error); !ok || e.Type != flags.ErrHelp { + parser.WriteHelp(os.Stderr) + } + return + } log, err = seelog.LoggerFromWriterWithMinLevel(os.Stdout, seelog.TraceLvl) @@ -46,24 +56,24 @@ func main() { defer log.Flush() btcdb.UseLogger(log) - if len(dbType) == 0 { - dbType = "sqlite" + var testnet string + if cfg.TestNet3 { + testnet = "testnet" + } else { + testnet = "mainnet" } - if len(datadir) == 0 { - datadir = filepath.Join(btcdHomeDir(), "data") - } - datadir = filepath.Join(datadir, "mainnet") + cfg.DataDir = filepath.Join(cfg.DataDir, testnet) blockDbNamePrefix := "blocks" - dbName := blockDbNamePrefix + "_" + dbType - if dbType == "sqlite" { + dbName := blockDbNamePrefix + "_" + cfg.DbType + if cfg.DbType == "sqlite" { dbName = dbName + ".db" } - dbPath := filepath.Join(datadir, dbName) + dbPath := filepath.Join(cfg.DataDir, dbName) log.Infof("loading db") - db, err := btcdb.OpenDB(dbType, dbPath) + db, err := btcdb.OpenDB(cfg.DbType, dbPath) if err != nil { log.Warnf("db open failed: %v", err) return @@ -74,9 +84,9 @@ func main() { _, height, err := db.NewestSha() log.Infof("loaded block height %v", height) - sha, err := getSha(db, shastring) + sha, err := getSha(db, cfg.ShaString) if err != nil { - log.Infof("Invalid block %v", shastring) + log.Infof("Invalid block hash %v", cfg.ShaString) return }