improve alpha sort in mflag
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
parent
0718fb409c
commit
6c4652a766
1 changed files with 17 additions and 2 deletions
|
@ -286,9 +286,24 @@ type Flag struct {
|
||||||
DefValue string // default value (as text); for usage message
|
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.
|
// sortFlags returns the flags as a slice in lexicographical sorted order.
|
||||||
func sortFlags(flags map[string]*Flag) []*Flag {
|
func sortFlags(flags map[string]*Flag) []*Flag {
|
||||||
var list sort.StringSlice
|
var list flagSlice
|
||||||
for _, f := range flags {
|
for _, f := range flags {
|
||||||
fName := strings.TrimPrefix(f.Names[0], "#")
|
fName := strings.TrimPrefix(f.Names[0], "#")
|
||||||
if len(f.Names) == 1 {
|
if len(f.Names) == 1 {
|
||||||
|
@ -307,7 +322,7 @@ func sortFlags(flags map[string]*Flag) []*Flag {
|
||||||
list = append(list, fName)
|
list = append(list, fName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list.Sort()
|
sort.Sort(list)
|
||||||
result := make([]*Flag, len(list))
|
result := make([]*Flag, len(list))
|
||||||
for i, name := range list {
|
for i, name := range list {
|
||||||
result[i] = flags[name]
|
result[i] = flags[name]
|
||||||
|
|
Loading…
Add table
Reference in a new issue