mirror of https://github.com/docker/cli.git
Only hide commands if the env variable is set.
Better formatting for usage template. Group commands in usage to management/operation commands. Remove the word Docker from the description of management commands. Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
68b7f55a45
commit
1f0f7ecb5a
79
cobra.go
79
cobra.go
|
@ -9,6 +9,11 @@ import (
|
||||||
// SetupRootCommand sets default usage, help, and error handling for the
|
// SetupRootCommand sets default usage, help, and error handling for the
|
||||||
// root command.
|
// root command.
|
||||||
func SetupRootCommand(rootCmd *cobra.Command) {
|
func SetupRootCommand(rootCmd *cobra.Command) {
|
||||||
|
cobra.AddTemplateFunc("hasSubCommands", hasSubCommands)
|
||||||
|
cobra.AddTemplateFunc("hasManagementSubCommands", hasManagementSubCommands)
|
||||||
|
cobra.AddTemplateFunc("operationSubCommands", operationSubCommands)
|
||||||
|
cobra.AddTemplateFunc("managementSubCommands", managementSubCommands)
|
||||||
|
|
||||||
rootCmd.SetUsageTemplate(usageTemplate)
|
rootCmd.SetUsageTemplate(usageTemplate)
|
||||||
rootCmd.SetHelpTemplate(helpTemplate)
|
rootCmd.SetHelpTemplate(helpTemplate)
|
||||||
rootCmd.SetFlagErrorFunc(FlagErrorFunc)
|
rootCmd.SetFlagErrorFunc(FlagErrorFunc)
|
||||||
|
@ -34,23 +39,81 @@ func FlagErrorFunc(cmd *cobra.Command, err error) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var usageTemplate = `Usage: {{if not .HasSubCommands}}{{.UseLine}}{{end}}{{if .HasSubCommands}}{{ .CommandPath}} COMMAND{{end}}
|
func hasSubCommands(cmd *cobra.Command) bool {
|
||||||
|
return len(operationSubCommands(cmd)) > 0
|
||||||
|
}
|
||||||
|
|
||||||
{{ .Short | trim }}{{if gt .Aliases 0}}
|
func hasManagementSubCommands(cmd *cobra.Command) bool {
|
||||||
|
return len(managementSubCommands(cmd)) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func operationSubCommands(cmd *cobra.Command) []*cobra.Command {
|
||||||
|
cmds := []*cobra.Command{}
|
||||||
|
for _, sub := range cmd.Commands() {
|
||||||
|
if sub.IsAvailableCommand() && !sub.HasSubCommands() {
|
||||||
|
cmds = append(cmds, sub)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmds
|
||||||
|
}
|
||||||
|
|
||||||
|
func managementSubCommands(cmd *cobra.Command) []*cobra.Command {
|
||||||
|
cmds := []*cobra.Command{}
|
||||||
|
for _, sub := range cmd.Commands() {
|
||||||
|
if sub.IsAvailableCommand() && sub.HasSubCommands() {
|
||||||
|
cmds = append(cmds, sub)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cmds
|
||||||
|
}
|
||||||
|
|
||||||
|
var usageTemplate = `Usage:
|
||||||
|
|
||||||
|
{{- if not .HasSubCommands}} {{.UseLine}}{{end}}
|
||||||
|
{{- if .HasSubCommands}} {{ .CommandPath}} COMMAND{{end}}
|
||||||
|
|
||||||
|
{{ .Short | trim }}
|
||||||
|
|
||||||
|
{{- if gt .Aliases 0}}
|
||||||
|
|
||||||
Aliases:
|
Aliases:
|
||||||
{{.NameAndAliases}}{{end}}{{if .HasExample}}
|
{{.NameAndAliases}}
|
||||||
|
|
||||||
|
{{- end}}
|
||||||
|
{{- if .HasExample}}
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
{{ .Example }}{{end}}{{if .HasFlags}}
|
{{ .Example }}
|
||||||
|
|
||||||
|
{{- end}}
|
||||||
|
{{- if .HasFlags}}
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
{{.Flags.FlagUsages | trimRightSpace}}{{end}}{{ if .HasAvailableSubCommands}}
|
{{.Flags.FlagUsages | trimRightSpace}}
|
||||||
|
|
||||||
Commands:{{range .Commands}}{{if .IsAvailableCommand}}
|
{{- end}}
|
||||||
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasSubCommands }}
|
{{- if hasManagementSubCommands . }}
|
||||||
|
|
||||||
Run '{{.CommandPath}} COMMAND --help' for more information on a command.{{end}}
|
Management Commands:
|
||||||
|
|
||||||
|
{{- range managementSubCommands . }}
|
||||||
|
{{rpad .Name .NamePadding }} {{.Short}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
{{- end}}
|
||||||
|
{{- if hasSubCommands .}}
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
|
||||||
|
{{- range operationSubCommands . }}
|
||||||
|
{{rpad .Name .NamePadding }} {{.Short}}
|
||||||
|
{{- end}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
{{- if .HasSubCommands }}
|
||||||
|
|
||||||
|
Run '{{.CommandPath}} COMMAND --help' for more information on a command.
|
||||||
|
{{- end}}
|
||||||
`
|
`
|
||||||
|
|
||||||
var helpTemplate = `
|
var helpTemplate = `
|
||||||
|
|
|
@ -15,7 +15,7 @@ import (
|
||||||
func NewCheckpointCommand(rootCmd *cobra.Command, dockerCli *command.DockerCli) {
|
func NewCheckpointCommand(rootCmd *cobra.Command, dockerCli *command.DockerCli) {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "checkpoint",
|
Use: "checkpoint",
|
||||||
Short: "Manage Container Checkpoints",
|
Short: "Manage checkpoints",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/docker/docker/cli/command"
|
"github.com/docker/docker/cli/command"
|
||||||
"github.com/docker/docker/cli/command/checkpoint"
|
"github.com/docker/docker/cli/command/checkpoint"
|
||||||
"github.com/docker/docker/cli/command/container"
|
"github.com/docker/docker/cli/command/container"
|
||||||
|
@ -75,6 +77,9 @@ func AddCommands(cmd *cobra.Command, dockerCli *command.DockerCli) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func hide(cmd *cobra.Command) *cobra.Command {
|
func hide(cmd *cobra.Command) *cobra.Command {
|
||||||
|
if os.Getenv("DOCKER_HIDE_LEGACY_COMMANDS") == "" {
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
cmdCopy := *cmd
|
cmdCopy := *cmd
|
||||||
cmdCopy.Hidden = true
|
cmdCopy.Hidden = true
|
||||||
cmdCopy.Aliases = []string{}
|
cmdCopy.Aliases = []string{}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewContainerCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewContainerCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "container",
|
Use: "container",
|
||||||
Short: "Manage Docker containers",
|
Short: "Manage containers",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewImageCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewImageCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "image",
|
Use: "image",
|
||||||
Short: "Manage Docker images",
|
Short: "Manage images",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewNetworkCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewNetworkCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "network",
|
Use: "network",
|
||||||
Short: "Manage Docker networks",
|
Short: "Manage networks",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
func NewNodeCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewNodeCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "node",
|
Use: "node",
|
||||||
Short: "Manage Docker Swarm nodes",
|
Short: "Manage Swarm nodes",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
func NewPluginCommand(rootCmd *cobra.Command, dockerCli *command.DockerCli) {
|
func NewPluginCommand(rootCmd *cobra.Command, dockerCli *command.DockerCli) {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "plugin",
|
Use: "plugin",
|
||||||
Short: "Manage Docker plugins",
|
Short: "Manage plugins",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewServiceCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewServiceCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "service",
|
Use: "service",
|
||||||
Short: "Manage Docker services",
|
Short: "Manage services",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
func NewStackCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewStackCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "stack",
|
Use: "stack",
|
||||||
Short: "Manage Docker stacks",
|
Short: "Manage stacks",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewSwarmCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewSwarmCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "swarm",
|
Use: "swarm",
|
||||||
Short: "Manage Docker Swarm",
|
Short: "Manage Swarm",
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString())
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func NewVolumeCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func NewVolumeCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "volume COMMAND",
|
Use: "volume COMMAND",
|
||||||
Short: "Manage Docker volumes",
|
Short: "Manage volumes",
|
||||||
Long: volumeDescription,
|
Long: volumeDescription,
|
||||||
Args: cli.NoArgs,
|
Args: cli.NoArgs,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
Loading…
Reference in New Issue