github.com/micro/go-micro/v2@v2.9.1/config/source/cli/util.go (about) 1 package cli 2 3 import ( 4 "errors" 5 "flag" 6 "strings" 7 8 "github.com/micro/cli/v2" 9 ) 10 11 func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) { 12 switch ff.Value.(type) { 13 case *cli.StringSlice: 14 default: 15 set.Set(name, ff.Value.String()) 16 } 17 } 18 19 func normalizeFlags(flags []cli.Flag, set *flag.FlagSet) error { 20 visited := make(map[string]bool) 21 set.Visit(func(f *flag.Flag) { 22 visited[f.Name] = true 23 }) 24 for _, f := range flags { 25 parts := f.Names() 26 if len(parts) == 1 { 27 continue 28 } 29 var ff *flag.Flag 30 for _, name := range parts { 31 name = strings.Trim(name, " ") 32 if visited[name] { 33 if ff != nil { 34 return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name) 35 } 36 ff = set.Lookup(name) 37 } 38 } 39 if ff == nil { 40 continue 41 } 42 for _, name := range parts { 43 name = strings.Trim(name, " ") 44 if !visited[name] { 45 copyFlag(name, ff, set) 46 } 47 } 48 } 49 return nil 50 }