From 627c2311fb2feaafdd55d444c3c2770d33c5b052 Mon Sep 17 00:00:00 2001
From: Kobi Gurkan <kobigurk@gmail.com>
Date: Mon, 7 Mar 2016 14:38:56 -0800
Subject: [PATCH] cmd/utils: add --keystore

---
 cmd/geth/main.go   |  1 +
 cmd/geth/usage.go  |  1 +
 cmd/utils/flags.go | 19 +++++++++++++++++--
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 8594d18c5..68e09912b 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -284,6 +284,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.GenesisFileFlag,
 		utils.BootnodesFlag,
 		utils.DataDirFlag,
+		utils.KeyStoreDirFlag,
 		utils.BlockchainVersionFlag,
 		utils.OlympicFlag,
 		utils.FastSyncFlag,
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
index 051c51878..d2f76eaa6 100644
--- a/cmd/geth/usage.go
+++ b/cmd/geth/usage.go
@@ -63,6 +63,7 @@ var AppHelpFlagGroups = []flagGroup{
 		Name: "ETHEREUM",
 		Flags: []cli.Flag{
 			utils.DataDirFlag,
+			utils.KeyStoreDirFlag,
 			utils.NetworkIdFlag,
 			utils.OlympicFlag,
 			utils.TestNetFlag,
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index adcc0adca..3efb65e42 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -102,6 +102,10 @@ var (
 		Usage: "Data directory for the databases and keystore",
 		Value: DirectoryString{common.DefaultDataDir()},
 	}
+	KeyStoreDirFlag = DirectoryFlag{
+		Name:  "keystore",
+		Usage: "Directory for the keystore (default = inside the datadir)",
+	}
 	NetworkIdFlag = cli.IntFlag{
 		Name:  "networkid",
 		Usage: "Network identifier (integer, 0=Olympic, 1=Frontier, 2=Morden)",
@@ -393,6 +397,16 @@ func MustMakeDataDir(ctx *cli.Context) string {
 	return ""
 }
 
+// MakeKeyStoreDir resolves the folder to use for storing the account keys from the
+// set command line flags, returning the explicitly requested path, or one inside
+// the data directory otherwise.
+func MakeKeyStoreDir(datadir string, ctx *cli.Context) string {
+	if path := ctx.GlobalString(KeyStoreDirFlag.Name); path != "" {
+		return path
+	}
+	return filepath.Join(datadir, "keystore")
+}
+
 // MakeIPCPath creates an IPC path configuration from the set command line flags,
 // returning an empty string if IPC was explicitly disabled, or the set path.
 func MakeIPCPath(ctx *cli.Context) string {
@@ -525,8 +539,9 @@ func MakeAccountManager(ctx *cli.Context) *accounts.Manager {
 	}
 	// Assemble an account manager using the configured datadir
 	var (
-		datadir  = MustMakeDataDir(ctx)
-		keystore = crypto.NewKeyStorePassphrase(filepath.Join(datadir, "keystore"), scryptN, scryptP)
+		datadir     = MustMakeDataDir(ctx)
+		keystoredir = MakeKeyStoreDir(datadir, ctx)
+		keystore    = crypto.NewKeyStorePassphrase(keystoredir, scryptN, scryptP)
 	)
 	return accounts.NewManager(keystore)
 }
-- 
GitLab