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