dotcloud/docker

View on GitHub
cmd/dockerd/cobra.go

Summary

Maintainability
A
0 mins
Test Coverage
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}}`