瀏覽代碼

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>
Daniel Nephin 8 年之前
父節點
當前提交
a7c8bcac2b

+ 71 - 8
cli/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
+}
+
+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:
 
 
-{{ .Short | trim }}{{if gt .Aliases 0}}
+{{- 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}}
+
+{{- end}}
+{{- if hasManagementSubCommands . }}
+
+Management Commands:
+
+{{- range managementSubCommands . }}
+  {{rpad .Name .NamePadding }} {{.Short}}
+{{- end}}
+
+{{- end}}
+{{- if hasSubCommands .}}
+
+Commands:
+
+{{- range operationSubCommands . }}
+  {{rpad .Name .NamePadding }} {{.Short}}
+{{- end}}
+{{- end}}
 
 
-Commands:{{range .Commands}}{{if .IsAvailableCommand}}
-  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasSubCommands }}
+{{- if .HasSubCommands }}
 
 
-Run '{{.CommandPath}} COMMAND --help' for more information on a command.{{end}}
+Run '{{.CommandPath}} COMMAND --help' for more information on a command.
+{{- end}}
 `
 `
 
 
 var helpTemplate = `
 var helpTemplate = `

+ 1 - 1
cli/command/checkpoint/cmd_experimental.go

@@ -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())

+ 5 - 0
cli/command/commands/commands.go

@@ -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{}

+ 1 - 1
cli/command/container/cmd.go

@@ -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())

+ 1 - 1
cli/command/image/cmd.go

@@ -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())

+ 1 - 1
cli/command/network/cmd.go

@@ -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())

+ 1 - 1
cli/command/node/cmd.go

@@ -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())

+ 1 - 1
cli/command/plugin/cmd_experimental.go

@@ -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())

+ 1 - 1
cli/command/service/cmd.go

@@ -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())

+ 1 - 1
cli/command/stack/cmd.go

@@ -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())

+ 1 - 1
cli/command/swarm/cmd.go

@@ -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())

+ 1 - 1
cli/command/volume/cmd.go

@@ -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) {