diff options
| author | Albert Nigmatzianov <[email protected]> | 2017-04-05 16:18:32 +0200 |
|---|---|---|
| committer | Eric Paris <[email protected]> | 2017-04-05 10:18:32 -0400 |
| commit | 9a906f17374922ed0f74e1b2f593d3723f2ffb00 (patch) | |
| tree | aee963894efcfe2b87eb38106a8683d01a7b9db7 | |
| parent | d16db1e50e33dff1b6cdf37596cef36742128670 (diff) | |
Prevent changing order of flags after SetNormalizeFunc() (#121)
Fix #120
| -rw-r--r-- | flag.go | 11 | ||||
| -rw-r--r-- | flag_test.go | 5 |
2 files changed, 10 insertions, 6 deletions
@@ -200,13 +200,12 @@ func sortFlags(flags map[NormalizedName]*Flag) []*Flag { // "--getUrl" which may also be translated to "geturl" and everything will work. func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) { f.normalizeNameFunc = n - f.orderedFormal = f.orderedFormal[:0] - for k, v := range f.formal { - delete(f.formal, k) - nname := f.normalizeFlagName(string(k)) - f.formal[nname] = v - f.orderedFormal = append(f.orderedFormal, v) + 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 } } diff --git a/flag_test.go b/flag_test.go index 55dd6c6..09249c8 100644 --- a/flag_test.go +++ b/flag_test.go @@ -1008,6 +1008,11 @@ func TestPrintDefaults(t *testing.T) { func TestVisitAllFlagOrder(t *testing.T) { fs := NewFlagSet("TestVisitAllFlagOrder", ContinueOnError) fs.SortFlags = false + // https://github.com/spf13/pflag/issues/120 + fs.SetNormalizeFunc(func(f *FlagSet, name string) NormalizedName { + return NormalizedName(name) + }) + names := []string{"C", "B", "A", "D"} for _, name := range names { fs.Bool(name, false, "") |
