cmd/utils: reduce nesting levels a bit

This commit is contained in:
Péter Szilágyi 2017-11-24 16:59:02 +02:00
parent 642612cb9f
commit a81accb08f
No known key found for this signature in database
GPG key ID: E9AE538CEDF8293D

View file

@ -929,31 +929,41 @@ func setEthash(ctx *cli.Context, cfg *eth.Config) {
} }
} }
// 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{}) { func checkExclusive(ctx *cli.Context, args ...interface{}) {
set := make([]string, 0, 1) set := make([]string, 0, 1)
for i, arg := range args { for i := 0; i < len(args); i++ {
if flag, ok := arg.(cli.Flag); ok { // Make sure the next argument is a flag and skip if not set
if ctx.GlobalIsSet(flag.GetName()) { flag, ok := args[i].(cli.Flag)
// Check if next arg extends current if !ok {
if len(args) > i+1 { panic(fmt.Sprintf("invalid argument, not cli.Flag type: %T", args[i]))
switch option := args[i+1].(type) { }
case cli.Flag: // Check if next arg extends current and expand its name if so
set = append(set, `"--`+flag.GetName()+`"`) name := flag.GetName()
case string:
if ctx.GlobalString(flag.GetName()) == option { if i+1 < len(args) {
set = append(set, `"--`+flag.GetName()+` `+option+`"`) switch option := args[i+1].(type) {
} case string:
default: // Extended flag, expand the name and shift the arguments
Fatalf("Received wrong type in checkExclusive") if ctx.GlobalString(flag.GetName()) == option {
} name += "=" + option
} else {
set = append(set, `"--`+flag.GetName()+`"`)
} }
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()) {
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, ", "))
} }
} }