func CheckCmdTree(cmd *cobra.Command, checks []CmdCheck, skip []string) []error { cmdPath := cmd.CommandPath() for _, skipCmdPath := range skip { if cmdPath == skipCmdPath { fmt.Fprintf(os.Stdout, "-----+ skipping command %s\n", cmdPath) return []error{} } } errors := []error{} if cmd.HasSubCommands() { for _, subCmd := range cmd.Commands() { errors = append(errors, CheckCmdTree(subCmd, checks, skip)...) } } fmt.Fprintf(os.Stdout, "-----+ checking command %s\n", cmdPath) for _, check := range checks { if err := check(cmd); err != nil && len(err) > 0 { errors = append(errors, err...) } } return errors }
// NormalizeAll perform all required normalizations in the entire command tree. func NormalizeAll(cmd *cobra.Command) *cobra.Command { if cmd.HasSubCommands() { for _, subCmd := range cmd.Commands() { NormalizeAll(subCmd) } } Normalize(cmd) return cmd }
// FlagErrorFunc prints an error messages which matches the format of the // docker/docker/cli error messages func FlagErrorFunc(cmd *cobra.Command, err error) error { if err == nil { return err } usage := "" if cmd.HasSubCommands() { usage = "\n\n" + cmd.UsageString() } return fmt.Errorf("%s\nSee '%s --help'.%s", err, cmd.CommandPath(), usage) }
// FlagErrorFunc prints an error message which matches the format of the // docker/docker/cli error messages func FlagErrorFunc(cmd *cobra.Command, err error) error { if err == nil { return err } usage := "" if cmd.HasSubCommands() { usage = "\n\n" + cmd.UsageString() } return StatusError{ Status: fmt.Sprintf("%s\nSee '%s --help'.%s", err, cmd.CommandPath(), usage), StatusCode: 125, } }
// NoArgs validate args and returns an error if there are any args func NoArgs(cmd *cobra.Command, args []string) error { if len(args) == 0 { return nil } if cmd.HasSubCommands() { return fmt.Errorf("\n" + strings.TrimRight(cmd.UsageString(), "\n")) } return fmt.Errorf( "\"%s\" accepts no argument(s).\nSee '%s --help'.\n\nUsage: %s\n\n%s", cmd.CommandPath(), cmd.CommandPath(), cmd.UseLine(), cmd.Short, ) }
func loadLongDescription(cmd *cobra.Command, path string) error { for _, cmd := range cmd.Commands() { if cmd.Name() == "" { continue } fullpath := filepath.Join(path, cmd.Name()+".md") if cmd.HasSubCommands() { loadLongDescription(cmd, filepath.Join(path, cmd.Name())) } if _, err := os.Stat(fullpath); err != nil { log.Printf("WARN: %s does not exist, skipping\n", fullpath) continue } content, err := ioutil.ReadFile(fullpath) if err != nil { return err } cmd.Long = string(content) } return nil }
func (m *Monocle) IsCommandTopic(cmd *cobra.Command) bool { return (cmd.HasSubCommands() || cmd.IsAvailableCommand()) }