| 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}}` |