51 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cli
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"flag"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/micro/cli/v2"
 | |
| )
 | |
| 
 | |
| func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) {
 | |
| 	switch ff.Value.(type) {
 | |
| 	case *cli.StringSlice:
 | |
| 	default:
 | |
| 		set.Set(name, ff.Value.String())
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func normalizeFlags(flags []cli.Flag, set *flag.FlagSet) error {
 | |
| 	visited := make(map[string]bool)
 | |
| 	set.Visit(func(f *flag.Flag) {
 | |
| 		visited[f.Name] = true
 | |
| 	})
 | |
| 	for _, f := range flags {
 | |
| 		parts := f.Names()
 | |
| 		if len(parts) == 1 {
 | |
| 			continue
 | |
| 		}
 | |
| 		var ff *flag.Flag
 | |
| 		for _, name := range parts {
 | |
| 			name = strings.Trim(name, " ")
 | |
| 			if visited[name] {
 | |
| 				if ff != nil {
 | |
| 					return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name)
 | |
| 				}
 | |
| 				ff = set.Lookup(name)
 | |
| 			}
 | |
| 		}
 | |
| 		if ff == nil {
 | |
| 			continue
 | |
| 		}
 | |
| 		for _, name := range parts {
 | |
| 			name = strings.Trim(name, " ")
 | |
| 			if !visited[name] {
 | |
| 				copyFlag(name, ff, set)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |