misc: fix non determinist zsh comp generation

Michael Muré created

upstream PR: https://github.com/spf13/cobra/pull/801

Change summary

vendor/github.com/spf13/cobra/zsh_completions.go | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)

Detailed changes

vendor/github.com/spf13/cobra/zsh_completions.go 🔗

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"io"
 	"os"
+	"sort"
 	"strings"
 )
 
@@ -81,16 +82,24 @@ func writeLevel(w io.Writer, root *Command, i int) {
 	commands := filterByLevel(root, i)
 	byParent := groupByParent(commands)
 
-	for p, c := range byParent {
-		names := names(c)
-		fmt.Fprintf(w, "      %s)\n", p)
+	// sort the parents to keep a determinist order
+	parents := make([]string, len(byParent))
+	j := 0
+	for parent := range byParent {
+		parents[j] = parent
+		j++
+	}
+	sort.StringSlice(parents).Sort()
+
+	for _, parent := range parents {
+		names := names(byParent[parent])
+		fmt.Fprintf(w, "      %s)\n", parent)
 		fmt.Fprintf(w, "        _arguments '%d: :(%s)'\n", i, strings.Join(names, " "))
 		fmt.Fprintln(w, "      ;;")
 	}
 	fmt.Fprintln(w, "      *)")
 	fmt.Fprintln(w, "        _arguments '*: :_files'")
 	fmt.Fprintln(w, "      ;;")
-
 }
 
 func filterByLevel(c *Command, l int) []*Command {