From 3729ece2ea1c4aad286b7535a7c137045a9da107 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 7 Mar 2014 02:20:59 +0000 Subject: [PATCH 1/2] improve alpha sort in mflag Docker-DCO-1.1-Signed-off-by: Victor Vieux (github: vieux) --- pkg/mflag/flag.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/mflag/flag.go b/pkg/mflag/flag.go index 7125c030ed..8b3d61e816 100644 --- a/pkg/mflag/flag.go +++ b/pkg/mflag/flag.go @@ -286,9 +286,24 @@ type Flag struct { DefValue string // default value (as text); for usage message } +type flagSlice []string + +func (p flagSlice) Len() int { return len(p) } +func (p flagSlice) Less(i, j int) bool { + pi, pj := p[i], p[j] + if pi[0] == '-' { + pi = pi[1:] + } + if pj[0] == '-' { + pj = pj[1:] + } + return pi < pj +} +func (p flagSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + // sortFlags returns the flags as a slice in lexicographical sorted order. func sortFlags(flags map[string]*Flag) []*Flag { - var list sort.StringSlice + var list flagSlice for _, f := range flags { fName := strings.TrimPrefix(f.Names[0], "#") if len(f.Names) == 1 { @@ -307,7 +322,7 @@ func sortFlags(flags map[string]*Flag) []*Flag { list = append(list, fName) } } - list.Sort() + sort.Sort(list) result := make([]*Flag, len(list)) for i, name := range list { result[i] = flags[name] From 7da37fec13a0097284ffbbe05514de477cd98677 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Fri, 7 Mar 2014 23:39:03 +0000 Subject: [PATCH 2/2] handle capital Docker-DCO-1.1-Signed-off-by: Victor Vieux (github: vieux) --- pkg/mflag/flag.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/mflag/flag.go b/pkg/mflag/flag.go index 8b3d61e816..f16f641341 100644 --- a/pkg/mflag/flag.go +++ b/pkg/mflag/flag.go @@ -290,7 +290,7 @@ type flagSlice []string func (p flagSlice) Len() int { return len(p) } func (p flagSlice) Less(i, j int) bool { - pi, pj := p[i], p[j] + pi, pj := strings.ToLower(p[i]), strings.ToLower(p[j]) if pi[0] == '-' { pi = pi[1:] }