Browse code

improve alpha sort in mflag

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/03/07 11:20:59
Showing 1 changed files
... ...
@@ -286,9 +286,24 @@ type Flag struct {
286 286
 	DefValue string   // default value (as text); for usage message
287 287
 }
288 288
 
289
+type flagSlice []string
290
+
291
+func (p flagSlice) Len() int { return len(p) }
292
+func (p flagSlice) Less(i, j int) bool {
293
+	pi, pj := p[i], p[j]
294
+	if pi[0] == '-' {
295
+		pi = pi[1:]
296
+	}
297
+	if pj[0] == '-' {
298
+		pj = pj[1:]
299
+	}
300
+	return pi < pj
301
+}
302
+func (p flagSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
303
+
289 304
 // sortFlags returns the flags as a slice in lexicographical sorted order.
290 305
 func sortFlags(flags map[string]*Flag) []*Flag {
291
-	var list sort.StringSlice
306
+	var list flagSlice
292 307
 	for _, f := range flags {
293 308
 		fName := strings.TrimPrefix(f.Names[0], "#")
294 309
 		if len(f.Names) == 1 {
... ...
@@ -307,7 +322,7 @@ func sortFlags(flags map[string]*Flag) []*Flag {
307 307
 			list = append(list, fName)
308 308
 		}
309 309
 	}
310
-	list.Sort()
310
+	sort.Sort(list)
311 311
 	result := make([]*Flag, len(list))
312 312
 	for i, name := range list {
313 313
 		result[i] = flags[name]