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  }