47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
// checkRootAlias compares the first argument provided in the CLI with a list of
|
|
// subcmds and aliases. If no match is found, the first alias of rootCmd is added.
|
|
func checkRootAlias() {
|
|
l := len(rootCmd.Aliases)
|
|
if l == 0 {
|
|
return
|
|
}
|
|
if l > 1 {
|
|
log.Printf("rootCmd.Aliases should contain a single string. '%s' is used.\n", rootCmd.Aliases[0])
|
|
}
|
|
if len(os.Args) > 1 {
|
|
for _, v := range append(nonRootSubCmds(), []string{"--help", "--version"}...) {
|
|
if os.Args[1] == v {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
os.Args = append([]string{os.Args[0], rootCmd.Aliases[0]}, os.Args[1:]...)
|
|
}
|
|
|
|
// nonRootSubCmds traverses the list of subcommands of rootCmd and returns a string
|
|
// slice containing the names and aliases of all the subcmds, except the one defined
|
|
// in the Aliases field of rootCmd.
|
|
func nonRootSubCmds() (l []string) {
|
|
for _, c := range rootCmd.Commands() {
|
|
isAlias := false
|
|
for _, a := range append(c.Aliases, c.Name()) {
|
|
if a == rootCmd.Aliases[0] {
|
|
isAlias = true
|
|
break
|
|
}
|
|
}
|
|
if !isAlias {
|
|
l = append(l, c.Name())
|
|
l = append(l, c.Aliases...)
|
|
}
|
|
}
|
|
return
|
|
}
|