From ce6e92e660bf6cf97a2ab258af78f4ce58a78cb2 Mon Sep 17 00:00:00 2001 From: Weiping Cai Date: Wed, 3 Feb 2021 17:17:00 +0800 Subject: [PATCH] clair vele help cli Signed-off-by: Weiping Cai --- pkg/commands/cli.go | 14 +------------ pkg/commands/help.go | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 pkg/commands/help.go diff --git a/pkg/commands/cli.go b/pkg/commands/cli.go index 4301ff347..b297c20ec 100644 --- a/pkg/commands/cli.go +++ b/pkg/commands/cli.go @@ -81,6 +81,7 @@ func NewCommand() *cobra.Command { NewDashboardCommand(commandArgs, ioStream, fake.FrontendSource), NewCompletionCommand(), NewVersionCommand(), + NewHelpCommand(), ) // this is for mute klog @@ -91,19 +92,6 @@ func NewCommand() *cobra.Command { return cmds } -// PrintHelpByTag print custom defined help message -func PrintHelpByTag(cmd *cobra.Command, all []*cobra.Command, tag string) { - cmd.Printf(" %s:\n\n", tag) - table := newUITable() - for _, c := range all { - if val, ok := c.Annotations[types.TagCommandType]; ok && val == tag { - table.AddRow(" "+c.Use, c.Long) - } - } - cmd.Println(table.String()) - cmd.Println() -} - // NewVersionCommand print client version func NewVersionCommand() *cobra.Command { return &cobra.Command{ diff --git a/pkg/commands/help.go b/pkg/commands/help.go new file mode 100644 index 000000000..71e15619e --- /dev/null +++ b/pkg/commands/help.go @@ -0,0 +1,49 @@ +package commands + +import ( + "github.com/oam-dev/kubevela/apis/types" + + "github.com/spf13/cobra" +) + +// NewHelpCommand get any command help +func NewHelpCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "help [command] ", + DisableFlagsInUseLine: true, + Short: "Help about any command", + Run: RunHelp, + } + return cmd +} + +// RunHelp exec help [command] +func RunHelp(cmd *cobra.Command, args []string) { + if len(args) == 0 { + allCommands := cmd.Root().Commands() + // print error message at first, since it can contain suggestions + cmd.Printf("A Highly Extensible Platform Engine based on Kubernetes and Open Application Model.\n\nUsage:\n vela [flags]\n vela [command]\n\nAvailable Commands:\n\n") + PrintHelpByTag(cmd, allCommands, types.TypeStart) + PrintHelpByTag(cmd, allCommands, types.TypeApp) + PrintHelpByTag(cmd, allCommands, types.TypeCap) + PrintHelpByTag(cmd, allCommands, types.TypeSystem) + } else { + foundCmd, _, err := cmd.Root().Find(args) + if foundCmd != nil && err == nil { + foundCmd.HelpFunc()(cmd, args) + } + } +} + +// PrintHelpByTag print custom defined help message +func PrintHelpByTag(cmd *cobra.Command, all []*cobra.Command, tag string) { + cmd.Printf(" %s:\n\n", tag) + table := newUITable() + for _, c := range all { + if val, ok := c.Annotations[types.TagCommandType]; ok && val == tag { + table.AddRow(" "+c.Use, c.Long) + } + } + cmd.Println(table.String()) + cmd.Println() +}