1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package main
- import (
- "fmt"
- "github.com/moby/term"
- "github.com/spf13/cobra"
- )
- // SetupRootCommand sets default usage, help, and error handling for the
- // root command.
- func SetupRootCommand(rootCmd *cobra.Command) {
- cobra.AddTemplateFunc("wrappedFlagUsages", wrappedFlagUsages)
- rootCmd.SetUsageTemplate(usageTemplate)
- rootCmd.SetHelpTemplate(helpTemplate)
- rootCmd.SetFlagErrorFunc(FlagErrorFunc)
- rootCmd.SetVersionTemplate("Docker version {{.Version}}\n")
- rootCmd.PersistentFlags().BoolP("help", "h", false, "Print usage")
- rootCmd.PersistentFlags().MarkShorthandDeprecated("help", "please use --help")
- }
- // 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 nil
- }
- 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,
- }
- }
- func wrappedFlagUsages(cmd *cobra.Command) string {
- width := 80
- if ws, err := term.GetWinsize(0); err == nil {
- width = int(ws.Width)
- }
- return cmd.Flags().FlagUsagesWrapped(width - 1)
- }
- const usageTemplate = `Usage: {{.UseLine}}
- {{ .Short | trim }}
- {{- if gt .Aliases 0}}
- Aliases:
- {{.NameAndAliases}}
- {{- end}}
- {{- if .HasExample}}
- Examples:
- {{ .Example }}
- {{- end}}
- {{- if .HasAvailableFlags}}
- Options:
- {{ wrappedFlagUsages . | trimRightSpace}}
- {{- end}}
- `
- const helpTemplate = `
- {{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
|