tweak help/--help
This commit is contained in:
parent
5b405d6747
commit
771917d2fc
@ -15,6 +15,14 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func cobraCommandFullName(c *cobra.Command) []string {
|
||||||
|
name := []string{c.Name()}
|
||||||
|
if c.HasParent() {
|
||||||
|
name = append(cobraCommandFullName(c.Parent()), name...)
|
||||||
|
}
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|
||||||
var Help = &cobra.Command{
|
var Help = &cobra.Command{
|
||||||
Use: _c.HelpCommandName + " [command]",
|
Use: _c.HelpCommandName + " [command]",
|
||||||
Short: "Display usage information for any command",
|
Short: "Display usage information for any command",
|
||||||
@ -39,34 +47,31 @@ var Help = &cobra.Command{
|
|||||||
return completions, cobra.ShellCompDirectiveNoFileComp
|
return completions, cobra.ShellCompDirectiveNoFileComp
|
||||||
},
|
},
|
||||||
Run: func(c *cobra.Command, args []string) {
|
Run: func(c *cobra.Command, args []string) {
|
||||||
cmd, _, e := c.Root().Find(args)
|
if len(args) > 0 && c != nil && c.Name() != args[len(args)-1] {
|
||||||
if cmd == nil || e != nil || (len(args) > 0 && cmd != nil && cmd.Name() != args[len(args)-1]) {
|
c, topicArgs, err := c.Root().Find(args)
|
||||||
if cmd == nil {
|
if err == nil && c != nil && len(topicArgs) == 0 {
|
||||||
err := c.Root().Help()
|
// exact command help
|
||||||
if err != nil {
|
cobra.CheckErr(c.Help())
|
||||||
logrus.Error(err)
|
os.Exit(statuscode.RenderHelp)
|
||||||
os.Exit(statuscode.ProgrammerError)
|
return
|
||||||
}
|
}
|
||||||
logrus.Errorf("Unknown help topic %s", args)
|
|
||||||
os.Exit(statuscode.NotFound)
|
|
||||||
} else {
|
|
||||||
err := cmd.Help()
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
os.Exit(statuscode.ProgrammerError)
|
os.Exit(statuscode.ProgrammerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(args) > 1 {
|
fullName := strings.Join(cobraCommandFullName(c), " ")
|
||||||
logrus.Errorf("Unknown help topic %s for %s", args[1], args[0])
|
cobra.CheckErr(c.Help())
|
||||||
|
if len(topicArgs) > 0 {
|
||||||
|
logrus.Errorf("Unknown help topic \"%s\" for %s", topicArgs[0], fullName)
|
||||||
} else {
|
} else {
|
||||||
logrus.Errorf("Unknown help topic %s for %s", runtime.Executable, args[0])
|
logrus.Errorf("Unknown help topic \"%s\"", args[0])
|
||||||
}
|
}
|
||||||
os.Exit(statuscode.NotFound)
|
os.Exit(statuscode.NotFound)
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
cmd.InitDefaultHelpFlag() // make possible 'help' flag to be shown
|
c.InitDefaultHelpFlag() // make possible 'help' flag to be shown
|
||||||
cobra.CheckErr(cmd.Help())
|
cobra.CheckErr(c.Help())
|
||||||
}
|
}
|
||||||
|
|
||||||
os.Exit(statuscode.RenderHelp)
|
os.Exit(statuscode.RenderHelp)
|
||||||
|
@ -40,7 +40,7 @@ type CommandRegistry struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Register(cmd *command.Command) {
|
func Register(cmd *command.Command) {
|
||||||
log.Debugf("adding to registry: %s", cmd.FullName())
|
log.Tracef("adding to registry: %s", cmd.FullName())
|
||||||
registry.kv[cmd.FullName()] = cmd
|
registry.kv[cmd.FullName()] = cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ func Execute(version string) error {
|
|||||||
if idx == len(cmd.Path)-1 {
|
if idx == len(cmd.Path)-1 {
|
||||||
leaf := ToCobra(cmd, cmdRoot.Options)
|
leaf := ToCobra(cmd, cmdRoot.Options)
|
||||||
container.AddCommand(leaf)
|
container.AddCommand(leaf)
|
||||||
log.Debugf("cobra: %s => %s", leaf.Name(), container.CommandPath())
|
log.Tracef("cobra: %s => %s", leaf.Name(), container.CommandPath())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user