diff --git a/context.go b/context.go index dbd910f..b469dc3 100644 --- a/context.go +++ b/context.go @@ -197,6 +197,7 @@ func lookupBool(name string, set *flag.FlagSet) bool { return false } + func lookupBoolT(name string, set *flag.FlagSet) bool { f := set.Lookup(name) if f != nil { @@ -210,6 +211,14 @@ func lookupBoolT(name string, set *flag.FlagSet) bool { return false } +func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) { + switch ff.Value.(type) { + case *StringSlice: + default: + set.Set(name, ff.Value.String()) + } +} + func normalizeFlags(flags []Flag, set *flag.FlagSet) error { visited := make(map[string]bool) set.Visit(func(f *flag.Flag) { @@ -235,7 +244,9 @@ func normalizeFlags(flags []Flag, set *flag.FlagSet) error { } for _, name := range parts { name = strings.Trim(name, " ") - set.Set(name, ff.Value.String()) + if !visited[name] { + copyFlag(name, ff, set) + } } } return nil diff --git a/flag_test.go b/flag_test.go index 28e4582..db8892f 100644 --- a/flag_test.go +++ b/flag_test.go @@ -2,6 +2,7 @@ package cli_test import ( "github.com/codegangsta/cli" + "reflect" "testing" ) @@ -101,6 +102,22 @@ func TestParseMultiString(t *testing.T) { }).Run([]string{"run", "-s", "10"}) } +func TestParseMultiStringSlice(t *testing.T) { + (&cli.App{ + Flags: []cli.Flag{ + cli.StringSliceFlag{Name: "serve, s", Value: &cli.StringSlice{}}, + }, + Action: func(ctx *cli.Context) { + if !reflect.DeepEqual(ctx.StringSlice("serve"), []string{"10", "20"}) { + t.Errorf("main name not set") + } + if !reflect.DeepEqual(ctx.StringSlice("s"), []string{"10", "20"}) { + t.Errorf("short name not set") + } + }, + }).Run([]string{"run", "-s", "10", "-s", "20"}) +} + func TestParseMultiInt(t *testing.T) { a := cli.App{ Flags: []cli.Flag{