diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3bb65a64ed..ec4dada011 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -162,10 +162,10 @@ var ( } NetworkIdFlag = cli.Uint64Flag{ Name: "networkid", - Usage: "Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby, 5=Görli)", + Usage: "Network identifier (integer, 1=Frontier, 3=Ropsten, 4=Rinkeby, 5=Görli)", Value: eth.DefaultConfig.NetworkId, } - LegacyTestnetFlag = cli.BoolFlag{ // Deprecated in favor of --goerli, --rinkeby, or --ropsten + LegacyTestnetFlag = cli.BoolFlag{ // TODO(q9f): Remove after Ropsten is discontinued. Name: "testnet", Usage: "Pre-configured test network (Deprecated: Please choose one of --goerli, --rinkeby, or --ropsten.)", } @@ -763,7 +763,6 @@ var ( Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", Value: "host=localhost", } - EWASMInterpreterFlag = cli.StringFlag{ Name: "vm.ewasm", Usage: "External ewasm configuration (default = built-in interpreter)", @@ -778,11 +777,18 @@ var ( // MakeDataDir retrieves the currently requested data directory, terminating // if none (or the empty string) is specified. If the node is starting a testnet, -// then a subdirectory of the specified data-dir will be used. +// then a subdirectory of the specified datadir will be used. func MakeDataDir(ctx *cli.Context) string { if path := ctx.GlobalString(DataDirFlag.Name); path != "" { if ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name) { - return filepath.Join(path, "testnet") + // Maintain compatibility with older Geth configurations storing the + // Ropsten database in `testnet` instead of `ropsten`. + legacyPath := filepath.Join(path, "testnet") + if DatadirExists(legacyPath) { + log.Warn("Using the deprecated `testnet` datadir. Future versions will store the Ropsten chain in `ropsten`.") + return legacyPath + } + return filepath.Join(path, "ropsten") } if ctx.GlobalBool(RinkebyFlag.Name) { return filepath.Join(path, "rinkeby") @@ -1245,7 +1251,14 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { case ctx.GlobalBool(DeveloperFlag.Name): cfg.DataDir = "" // unless explicitly requested, use memory databases case (ctx.GlobalBool(LegacyTestnetFlag.Name) || ctx.GlobalBool(RopstenFlag.Name)) && cfg.DataDir == node.DefaultDataDir(): - cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet") + // Maintain compatibility with older Geth configurations storing the + // Ropsten database in `testnet` instead of `ropsten`. + legacyPath := filepath.Join(node.DefaultDataDir(), "testnet") + if DatadirExists(legacyPath) { + cfg.DataDir = legacyPath + } else { + cfg.DataDir = filepath.Join(node.DefaultDataDir(), "ropsten") + } case ctx.GlobalBool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): @@ -1818,3 +1831,15 @@ func MigrateFlags(action func(ctx *cli.Context) error) func(*cli.Context) error return action(ctx) } } + +// DatadirExists checks wether the datadir in `path` exists or not. +// +// E.g., can be used to determine wether to use the old `testnet` directory for +// Ropsten or create a new `ropsten` datadir instead. +func DatadirExists(path string) bool { + if _, err := os.Stat(path); !os.IsNotExist(err) { + return true + } else { + return false + } +}