OSDN Git Service

bytomcli add distinguish for child commands
authoroysheng <oysheng@bytom.io>
Wed, 25 Apr 2018 08:32:20 +0000 (16:32 +0800)
committeroysheng <oysheng@bytom.io>
Wed, 25 Apr 2018 08:32:20 +0000 (16:32 +0800)
cmd/bytomcli/commands/bytomcli.go

index b019c5c..bc05d5b 100644 (file)
@@ -10,6 +10,37 @@ import (
        "github.com/bytom/util"
 )
 
+// bytomcli usage template
+var usageTemplate = `Usage:{{if .Runnable}}
+  {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
+  {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
+
+Aliases:
+  {{.NameAndAliases}}{{end}}{{if .HasExample}}
+
+Examples:
+{{.Example}}{{end}}{{if .HasAvailableSubCommands}}
+
+Available Commands:
+    {{range .Commands}}{{if (and .IsAvailableCommand (.Name | WalletDisable))}}
+    {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}
+
+  available with wallet enable:
+    {{range .Commands}}{{if (and .IsAvailableCommand (.Name | WalletEnable))}}
+    {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
+
+Flags:
+{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
+
+Global Flags:
+{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
+
+Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
+  {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
+
+Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
+`
+
 // commandError is an error used to signal different error situations in command handling.
 type commandError struct {
        s         string
@@ -56,6 +87,7 @@ var BytomcliCmd = &cobra.Command{
        Short: "Bytomcli is a commond line client for bytom core (a.k.a. bytomd)",
        Run: func(cmd *cobra.Command, args []string) {
                if len(args) < 1 {
+                       cmd.SetUsageTemplate(usageTemplate)
                        cmd.Usage()
                }
        },
@@ -65,6 +97,7 @@ var BytomcliCmd = &cobra.Command{
 func Execute() {
 
        AddCommands()
+       AddTemplateFunc()
 
        if _, err := BytomcliCmd.ExecuteC(); err != nil {
                os.Exit(util.ErrLocalExe)
@@ -128,3 +161,53 @@ func AddCommands() {
 
        BytomcliCmd.AddCommand(versionCmd)
 }
+
+// AddTemplateFunc adds usage template to the root command BytomcliCmd.
+func AddTemplateFunc() {
+       walletEnableCmd := []string{
+               createAccountCmd.Name(),
+               listAccountsCmd.Name(),
+               deleteAccountCmd.Name(),
+               createAccountReceiverCmd.Name(),
+               listAddressesCmd.Name(),
+               validateAddressCmd.Name(),
+
+               createAssetCmd.Name(),
+               getAssetCmd.Name(),
+               listAssetsCmd.Name(),
+               updateAssetAliasCmd.Name(),
+
+               createKeyCmd.Name(),
+               deleteKeyCmd.Name(),
+               listKeysCmd.Name(),
+               resetKeyPwdCmd.Name(),
+
+               buildTransactionCmd.Name(),
+               signTransactionCmd.Name(),
+               submitTransactionCmd.Name(),
+               estimateTransactionGasCmd.Name(),
+
+               getTransactionCmd.Name(),
+               listTransactionsCmd.Name(),
+               listUnspentOutputsCmd.Name(),
+               listBalancesCmd.Name(),
+       }
+
+       cobra.AddTemplateFunc("WalletEnable", func(cmdName string) bool {
+               for _, name := range walletEnableCmd {
+                       if name == cmdName {
+                               return true
+                       }
+               }
+               return false
+       })
+
+       cobra.AddTemplateFunc("WalletDisable", func(cmdName string) bool {
+               for _, name := range walletEnableCmd {
+                       if name == cmdName {
+                               return false
+                       }
+               }
+               return true
+       })
+}