karmada/pkg/sharedcli/commandusage.go

56 lines
1.7 KiB
Go

package sharedcli
import (
"fmt"
"strings"
"github.com/spf13/cobra"
cliflag "k8s.io/component-base/cli/flag"
)
const (
usageFmt = "Usage:\n %s\n"
)
// generatesAvailableSubCommands generates command's subcommand information which
// is usually part of a help message. E.g.:
//
// Available Commands:
// karmada-controller-manager completion generate the autocompletion script for the specified shell
// karmada-controller-manager help Help about any command
// karmada-controller-manager version Print the version information.
//
func generatesAvailableSubCommands(cmd *cobra.Command) []string {
if !cmd.HasAvailableSubCommands() {
return nil
}
info := []string{"\nAvailable Commands:"}
for _, sub := range cmd.Commands() {
if !sub.Hidden {
info = append(info, fmt.Sprintf(" %s %-30s %s", cmd.CommandPath(), sub.Name(), sub.Short))
}
}
return info
}
// SetUsageAndHelpFunc set both usage and help function.
func SetUsageAndHelpFunc(cmd *cobra.Command, fss cliflag.NamedFlagSets, cols int) {
cmd.SetUsageFunc(func(cmd *cobra.Command) error {
fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine())
if cmd.HasAvailableSubCommands() {
fmt.Fprintf(cmd.OutOrStderr(), "%s\n", strings.Join(generatesAvailableSubCommands(cmd), "\n"))
}
cliflag.PrintSections(cmd.OutOrStderr(), fss, cols)
return nil
})
cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine())
if cmd.HasAvailableSubCommands() {
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", strings.Join(generatesAvailableSubCommands(cmd), "\n"))
}
cliflag.PrintSections(cmd.OutOrStdout(), fss, cols)
})
}