diff options
| author | Diego Becciolini <[email protected]> | 2017-10-01 23:02:52 +0100 |
|---|---|---|
| committer | Albert Nigmatzianov <[email protected]> | 2017-10-02 00:02:52 +0200 |
| commit | be7121dd7a937a85e1e4b1ddda6a3edce3466110 (patch) | |
| tree | 477625a9e13468dd61981baeade64e055d93214f /flag.go | |
| parent | 5c2d607c75df0540c877524f9e82d3edb7748668 (diff) | |
Fix SetNormalizeFunc (#137)
Related to https://github.com/spf13/cobra/issues/521
Diffstat (limited to 'flag.go')
| -rw-r--r-- | flag.go | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -202,12 +202,18 @@ func sortFlags(flags map[NormalizedName]*Flag) []*Flag { func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) { f.normalizeNameFunc = n f.sortedFormal = f.sortedFormal[:0] - for k, v := range f.orderedFormal { - delete(f.formal, NormalizedName(v.Name)) - nname := f.normalizeFlagName(v.Name) - v.Name = string(nname) - f.formal[nname] = v - f.orderedFormal[k] = v + for fname, flag := range f.formal { + nname := f.normalizeFlagName(flag.Name) + if fname == nname { + continue + } + flag.Name = string(nname) + delete(f.formal, fname) + f.formal[nname] = flag + if _, set := f.actual[fname]; set { + delete(f.actual, fname) + f.actual[nname] = flag + } } } @@ -440,13 +446,15 @@ func (f *FlagSet) Set(name, value string) error { return fmt.Errorf("invalid argument %q for %q flag: %v", value, flagName, err) } - if f.actual == nil { - f.actual = make(map[NormalizedName]*Flag) - } - f.actual[normalName] = flag - f.orderedActual = append(f.orderedActual, flag) + if !flag.Changed { + if f.actual == nil { + f.actual = make(map[NormalizedName]*Flag) + } + f.actual[normalName] = flag + f.orderedActual = append(f.orderedActual, flag) - flag.Changed = true + flag.Changed = true + } if flag.Deprecated != "" { fmt.Fprintf(f.out(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) |
