fix(context): copy StringSlice Flag correctly
This commit is contained in:
parent
4097aa09fe
commit
ce13660ae0
13
context.go
13
context.go
@ -197,6 +197,7 @@ func lookupBool(name string, set *flag.FlagSet) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func lookupBoolT(name string, set *flag.FlagSet) bool {
|
func lookupBoolT(name string, set *flag.FlagSet) bool {
|
||||||
f := set.Lookup(name)
|
f := set.Lookup(name)
|
||||||
if f != nil {
|
if f != nil {
|
||||||
@ -210,6 +211,14 @@ func lookupBoolT(name string, set *flag.FlagSet) bool {
|
|||||||
return false
|
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 {
|
func normalizeFlags(flags []Flag, set *flag.FlagSet) error {
|
||||||
visited := make(map[string]bool)
|
visited := make(map[string]bool)
|
||||||
set.Visit(func(f *flag.Flag) {
|
set.Visit(func(f *flag.Flag) {
|
||||||
@ -235,7 +244,9 @@ func normalizeFlags(flags []Flag, set *flag.FlagSet) error {
|
|||||||
}
|
}
|
||||||
for _, name := range parts {
|
for _, name := range parts {
|
||||||
name = strings.Trim(name, " ")
|
name = strings.Trim(name, " ")
|
||||||
set.Set(name, ff.Value.String())
|
if !visited[name] {
|
||||||
|
copyFlag(name, ff, set)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
17
flag_test.go
17
flag_test.go
@ -2,6 +2,7 @@ package cli_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/codegangsta/cli"
|
"github.com/codegangsta/cli"
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -101,6 +102,22 @@ func TestParseMultiString(t *testing.T) {
|
|||||||
}).Run([]string{"run", "-s", "10"})
|
}).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) {
|
func TestParseMultiInt(t *testing.T) {
|
||||||
a := cli.App{
|
a := cli.App{
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
|
Loading…
Reference in New Issue
Block a user