cmd/utils: disallow --lightserv in light mode (#15514)

* Disallow --lightserv in light mode

* Reformatted

* cmd/utils: reduce nesting levels a bit
This commit is contained in:
Paul Litvak 2017-11-24 17:07:22 +02:00 committed by Péter Szilágyi
parent de37e088f2
commit e4c9fd29a3

View File

@ -929,15 +929,41 @@ func setEthash(ctx *cli.Context, cfg *eth.Config) {
} }
} }
func checkExclusive(ctx *cli.Context, flags ...cli.Flag) { // checkExclusive verifies that only a single isntance of the provided flags was
// set by the user. Each flag might optionally be followed by a string type to
// specialize it further.
func checkExclusive(ctx *cli.Context, args ...interface{}) {
set := make([]string, 0, 1) set := make([]string, 0, 1)
for _, flag := range flags { for i := 0; i < len(args); i++ {
// Make sure the next argument is a flag and skip if not set
flag, ok := args[i].(cli.Flag)
if !ok {
panic(fmt.Sprintf("invalid argument, not cli.Flag type: %T", args[i]))
}
// Check if next arg extends current and expand its name if so
name := flag.GetName()
if i+1 < len(args) {
switch option := args[i+1].(type) {
case string:
// Extended flag, expand the name and shift the arguments
if ctx.GlobalString(flag.GetName()) == option {
name += "=" + option
}
i++
case cli.Flag:
default:
panic(fmt.Sprintf("invalid argument, not cli.Flag or string extension: %T", args[i+1]))
}
}
// Mark the flag if it's set
if ctx.GlobalIsSet(flag.GetName()) { if ctx.GlobalIsSet(flag.GetName()) {
set = append(set, "--"+flag.GetName()) set = append(set, "--"+name)
} }
} }
if len(set) > 1 { if len(set) > 1 {
Fatalf("flags %v can't be used at the same time", strings.Join(set, ", ")) Fatalf("Flags %v can't be used at the same time", strings.Join(set, ", "))
} }
} }
@ -956,6 +982,8 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
// Avoid conflicting network flags // Avoid conflicting network flags
checkExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag) checkExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag)
checkExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag) checkExclusive(ctx, FastSyncFlag, LightModeFlag, SyncModeFlag)
checkExclusive(ctx, LightServFlag, LightModeFlag)
checkExclusive(ctx, LightServFlag, SyncModeFlag, "light")
ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore)
setEtherbase(ctx, ks, cfg) setEtherbase(ctx, ks, cfg)