Merge pull request #73 from unihorn/43

fix(context): copy StringSlice Flag correctly
main
Jeremy Saenz 11 years ago
commit 3fa24ca4f3

@ -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

@ -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…
Cancel
Save