From 0adaf6be3bea011aeb9aa87c5e766341d5792f76 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Fri, 29 Aug 2025 22:40:57 +0200 Subject: [PATCH] verify that DisableFlagsInUseLine is set for all commands This replaces the visitAll recursive function with a test that verifies that the option is set for all commands and subcommands, so that it doesn't have to be modified at runtime. We currently still have to loop over all functions for the setValidateArgs call, but that can be looked at separately. Signed-off-by: Sebastiaan van Stijn --- cli/command/builder/cmd.go | 3 +++ cli/command/builder/prune.go | 5 +++-- cli/command/checkpoint/cmd.go | 1 + cli/command/checkpoint/create.go | 7 ++++--- cli/command/checkpoint/list.go | 7 ++++--- cli/command/checkpoint/remove.go | 5 +++-- cli/command/config/cmd.go | 1 + cli/command/config/create.go | 3 ++- cli/command/config/inspect.go | 1 + cli/command/config/ls.go | 3 ++- cli/command/config/remove.go | 1 + cli/command/container/attach.go | 1 + cli/command/container/cmd.go | 2 ++ cli/command/container/commit.go | 3 ++- cli/command/container/cp.go | 1 + cli/command/container/create.go | 3 ++- cli/command/container/diff.go | 3 ++- cli/command/container/exec.go | 1 + cli/command/container/export.go | 3 ++- cli/command/container/inspect.go | 7 ++++--- cli/command/container/kill.go | 3 ++- cli/command/container/list.go | 3 ++- cli/command/container/logs.go | 3 ++- cli/command/container/pause.go | 1 + cli/command/container/port.go | 7 ++++--- cli/command/container/prune.go | 5 +++-- cli/command/container/rename.go | 3 ++- cli/command/container/restart.go | 3 ++- cli/command/container/rm.go | 1 + cli/command/container/run.go | 1 + cli/command/container/start.go | 7 ++++--- cli/command/container/stats.go | 3 ++- cli/command/container/stop.go | 3 ++- cli/command/container/top.go | 3 ++- cli/command/container/unpause.go | 7 ++++--- cli/command/container/update.go | 3 ++- cli/command/container/wait.go | 3 ++- cli/command/context/cmd.go | 2 ++ cli/command/context/create.go | 5 +++-- cli/command/context/export.go | 3 ++- cli/command/context/import.go | 7 ++++--- cli/command/context/inspect.go | 3 ++- cli/command/context/list.go | 7 ++++--- cli/command/context/remove.go | 3 ++- cli/command/context/show.go | 7 ++++--- cli/command/context/update.go | 5 +++-- cli/command/context/use.go | 3 ++- cli/command/image/build.go | 7 ++++--- cli/command/image/cmd.go | 2 ++ cli/command/image/history.go | 1 + cli/command/image/import.go | 1 + cli/command/image/inspect.go | 7 ++++--- cli/command/image/list.go | 1 + cli/command/image/load.go | 3 ++- cli/command/image/prune.go | 5 +++-- cli/command/image/pull.go | 3 ++- cli/command/image/push.go | 3 ++- cli/command/image/remove.go | 1 + cli/command/image/save.go | 3 ++- cli/command/image/tag.go | 7 ++++--- cli/command/manifest/annotate.go | 5 +++-- cli/command/manifest/cmd.go | 3 ++- cli/command/manifest/create_list.go | 5 +++-- cli/command/manifest/inspect.go | 5 +++-- cli/command/manifest/push.go | 5 +++-- cli/command/manifest/rm.go | 1 + cli/command/network/cmd.go | 2 ++ cli/command/network/connect.go | 1 + cli/command/network/create.go | 3 ++- cli/command/network/disconnect.go | 9 +++++---- cli/command/network/inspect.go | 3 ++- cli/command/network/list.go | 7 ++++--- cli/command/network/prune.go | 3 ++- cli/command/network/remove.go | 7 ++++--- cli/command/node/cmd.go | 1 + cli/command/node/demote.go | 7 ++++--- cli/command/node/inspect.go | 7 ++++--- cli/command/node/list.go | 7 ++++--- cli/command/node/promote.go | 7 ++++--- cli/command/node/ps.go | 7 ++++--- cli/command/node/remove.go | 7 ++++--- cli/command/node/update.go | 7 ++++--- cli/command/plugin/cmd.go | 2 ++ cli/command/plugin/create.go | 7 ++++--- cli/command/plugin/disable.go | 1 + cli/command/plugin/enable.go | 7 ++++--- cli/command/plugin/inspect.go | 5 +++-- cli/command/plugin/install.go | 7 ++++--- cli/command/plugin/list.go | 7 ++++--- cli/command/plugin/push.go | 1 + cli/command/plugin/remove.go | 5 +++-- cli/command/plugin/set.go | 5 +++-- cli/command/plugin/upgrade.go | 9 +++++---- cli/command/registry/login.go | 3 ++- cli/command/registry/logout.go | 1 + cli/command/registry/search.go | 1 + cli/command/secret/cmd.go | 1 + cli/command/secret/create.go | 5 +++-- cli/command/secret/inspect.go | 7 ++++--- cli/command/secret/ls.go | 7 ++++--- cli/command/secret/remove.go | 1 + cli/command/service/cmd.go | 1 + cli/command/service/create.go | 3 ++- cli/command/service/inspect.go | 7 ++++--- cli/command/service/list.go | 3 ++- cli/command/service/logs.go | 9 +++++---- cli/command/service/ps.go | 7 ++++--- cli/command/service/remove.go | 7 ++++--- cli/command/service/rollback.go | 9 +++++---- cli/command/service/scale.go | 7 ++++--- cli/command/service/update.go | 3 ++- cli/command/stack/cmd.go | 1 + cli/command/stack/config.go | 9 +++++---- cli/command/stack/deploy.go | 9 +++++---- cli/command/stack/list.go | 3 ++- cli/command/stack/ps.go | 1 + cli/command/stack/remove.go | 7 ++++--- cli/command/stack/services.go | 1 + cli/command/swarm/ca.go | 7 ++++--- cli/command/swarm/cmd.go | 1 + cli/command/swarm/init.go | 7 ++++--- cli/command/swarm/join.go | 5 +++-- cli/command/swarm/join_token.go | 5 +++-- cli/command/swarm/leave.go | 7 ++++--- cli/command/swarm/testdata/update-noargs.golden | 2 +- cli/command/swarm/unlock.go | 7 ++++--- cli/command/swarm/unlock_key.go | 7 ++++--- cli/command/swarm/update.go | 7 ++++--- cli/command/system/cmd.go | 2 ++ cli/command/system/df.go | 9 +++++---- cli/command/system/dial_stdio.go | 7 ++++--- cli/command/system/events.go | 3 ++- cli/command/system/info.go | 3 ++- cli/command/system/inspect.go | 3 ++- cli/command/system/prune.go | 9 +++++---- cli/command/system/version.go | 3 ++- cli/command/trust/cmd.go | 2 ++ cli/command/trust/inspect.go | 5 +++-- cli/command/trust/key.go | 10 ++++++---- cli/command/trust/key_generate.go | 5 +++-- cli/command/trust/key_load.go | 5 +++-- cli/command/trust/revoke.go | 1 + cli/command/trust/sign.go | 1 + cli/command/trust/signer.go | 10 ++++++---- cli/command/trust/signer_add.go | 1 + cli/command/trust/signer_remove.go | 5 +++-- cli/command/volume/cmd.go | 2 ++ cli/command/volume/create.go | 7 ++++--- cli/command/volume/inspect.go | 7 ++++--- cli/command/volume/list.go | 7 ++++--- cli/command/volume/prune.go | 5 +++-- cli/command/volume/remove.go | 7 ++++--- cli/command/volume/update.go | 7 ++++--- cmd/docker/docker.go | 6 +----- cmd/docker/docker_test.go | 17 +++++++++++++++++ 155 files changed, 434 insertions(+), 257 deletions(-) diff --git a/cli/command/builder/cmd.go b/cli/command/builder/cmd.go index 1f9b627eab..8aa693e5b5 100644 --- a/cli/command/builder/cmd.go +++ b/cli/command/builder/cmd.go @@ -24,6 +24,8 @@ func newBuilderCommand(dockerCLI command.Cli) *cobra.Command { Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), Annotations: map[string]string{"version": "1.31"}, + + DisableFlagsInUseLine: true, } cmd.AddCommand( newPruneCommand(dockerCLI), @@ -50,5 +52,6 @@ func newBakeStubCommand(dockerCLI command.Streams) *cobra.Command { "aliases": "docker buildx bake", "version": "1.31", }, + DisableFlagsInUseLine: true, } } diff --git a/cli/command/builder/prune.go b/cli/command/builder/prune.go index 495a2cb95e..4cb7b2df01 100644 --- a/cli/command/builder/prune.go +++ b/cli/command/builder/prune.go @@ -50,8 +50,9 @@ func newPruneCommand(dockerCLI command.Cli) *cobra.Command { _, _ = fmt.Fprintln(dockerCLI.Out(), "Total reclaimed space:", units.HumanSize(float64(spaceReclaimed))) return nil }, - Annotations: map[string]string{"version": "1.39"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.39"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/checkpoint/cmd.go b/cli/command/checkpoint/cmd.go index 5909495e58..fd33bd8a8d 100644 --- a/cli/command/checkpoint/cmd.go +++ b/cli/command/checkpoint/cmd.go @@ -23,6 +23,7 @@ func newCheckpointCommand(dockerCLI command.Cli) *cobra.Command { "ostype": "linux", "version": "1.25", }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newCreateCommand(dockerCLI), diff --git a/cli/command/checkpoint/create.go b/cli/command/checkpoint/create.go index cd9e663b59..2dad7b8315 100644 --- a/cli/command/checkpoint/create.go +++ b/cli/command/checkpoint/create.go @@ -17,7 +17,7 @@ type createOptions struct { leaveRunning bool } -func newCreateCommand(dockerCli command.Cli) *cobra.Command { +func newCreateCommand(dockerCLI command.Cli) *cobra.Command { var opts createOptions cmd := &cobra.Command{ @@ -27,9 +27,10 @@ func newCreateCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { opts.container = args[0] opts.checkpoint = args[1] - return runCreate(cmd.Context(), dockerCli, opts) + return runCreate(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/checkpoint/list.go b/cli/command/checkpoint/list.go index af954c6d37..d4da99b667 100644 --- a/cli/command/checkpoint/list.go +++ b/cli/command/checkpoint/list.go @@ -15,7 +15,7 @@ type listOptions struct { checkpointDir string } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { var opts listOptions cmd := &cobra.Command{ @@ -24,9 +24,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Short: "List checkpoints for a container", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context(), dockerCli, args[0], opts) + return runList(cmd.Context(), dockerCLI, args[0], opts) }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/checkpoint/remove.go b/cli/command/checkpoint/remove.go index 2622642921..b0f127b470 100644 --- a/cli/command/checkpoint/remove.go +++ b/cli/command/checkpoint/remove.go @@ -13,7 +13,7 @@ type removeOptions struct { checkpointDir string } -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { var opts removeOptions cmd := &cobra.Command{ @@ -22,8 +22,9 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { Short: "Remove a checkpoint", Args: cli.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - return runRemove(cmd.Context(), dockerCli, args[0], args[1], opts) + return runRemove(cmd.Context(), dockerCLI, args[0], args[1], opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/config/cmd.go b/cli/command/config/cmd.go index d4d60df4d3..c95b3663b9 100644 --- a/cli/command/config/cmd.go +++ b/cli/command/config/cmd.go @@ -24,6 +24,7 @@ func newConfigCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.30", "swarm": "manager", }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newConfigListCommand(dockerCLI), diff --git a/cli/command/config/create.go b/cli/command/config/create.go index 4b2eaafbfe..4b3903d71e 100644 --- a/cli/command/config/create.go +++ b/cli/command/config/create.go @@ -36,7 +36,8 @@ func newConfigCreateCommand(dockerCLI command.Cli) *cobra.Command { createOpts.file = args[1] return runCreate(cmd.Context(), dockerCLI, createOpts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.VarP(&createOpts.labels, "label", "l", "Config labels") diff --git a/cli/command/config/inspect.go b/cli/command/config/inspect.go index cbfe2dfcd1..3f8362543f 100644 --- a/cli/command/config/inspect.go +++ b/cli/command/config/inspect.go @@ -35,6 +35,7 @@ func newConfigInspectCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/config/ls.go b/cli/command/config/ls.go index 82d7b519fe..93522fdd8c 100644 --- a/cli/command/config/ls.go +++ b/cli/command/config/ls.go @@ -32,7 +32,8 @@ func newConfigListCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runList(cmd.Context(), dockerCLI, listOpts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/config/remove.go b/cli/command/config/remove.go index 9f1e9253d2..2f7de31f62 100644 --- a/cli/command/config/remove.go +++ b/cli/command/config/remove.go @@ -22,6 +22,7 @@ func newConfigRemoveCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } } diff --git a/cli/command/container/attach.go b/cli/command/container/attach.go index b39b09fbef..c7f4577eea 100644 --- a/cli/command/container/attach.go +++ b/cli/command/container/attach.go @@ -58,6 +58,7 @@ func newAttachCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr container.Summary) bool { return ctr.State != container.StatePaused }), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/cmd.go b/cli/command/container/cmd.go index 9105e78f73..4a6174d50d 100644 --- a/cli/command/container/cmd.go +++ b/cli/command/container/cmd.go @@ -41,6 +41,8 @@ func newContainerCommand(dockerCLI command.Cli) *cobra.Command { Short: "Manage containers", Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( newAttachCommand(dockerCLI), diff --git a/cli/command/container/commit.go b/cli/command/container/commit.go index 4f7e909139..66d922fc98 100644 --- a/cli/command/container/commit.go +++ b/cli/command/container/commit.go @@ -40,7 +40,8 @@ func newCommitCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container commit, docker commit", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/cp.go b/cli/command/container/cp.go index 48dc4a8978..51429620bf 100644 --- a/cli/command/container/cp.go +++ b/cli/command/container/cp.go @@ -154,6 +154,7 @@ container source to stdout.`, Annotations: map[string]string{ "aliases": "docker container cp, docker cp", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/create.go b/cli/command/container/create.go index dbf5bdc16e..73471b817a 100644 --- a/cli/command/container/create.go +++ b/cli/command/container/create.go @@ -69,7 +69,8 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container create, docker create", }, - ValidArgsFunction: completion.ImageNames(dockerCLI, -1), + ValidArgsFunction: completion.ImageNames(dockerCLI, -1), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/diff.go b/cli/command/container/diff.go index d4d50543ac..164ebf02a0 100644 --- a/cli/command/container/diff.go +++ b/cli/command/container/diff.go @@ -22,7 +22,8 @@ func newDiffCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container diff, docker diff", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } } diff --git a/cli/command/container/exec.go b/cli/command/container/exec.go index a8370470d7..3d3a8595ab 100644 --- a/cli/command/container/exec.go +++ b/cli/command/container/exec.go @@ -59,6 +59,7 @@ func newExecCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "2", "aliases": "docker container exec, docker exec", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/export.go b/cli/command/container/export.go index 75b996fc11..8c295847ae 100644 --- a/cli/command/container/export.go +++ b/cli/command/container/export.go @@ -32,7 +32,8 @@ func newExportCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container export, docker export", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/inspect.go b/cli/command/container/inspect.go index 6a33549ca8..773301939f 100644 --- a/cli/command/container/inspect.go +++ b/cli/command/container/inspect.go @@ -21,7 +21,7 @@ type inspectOptions struct { } // newInspectCommand creates a new cobra.Command for `docker container inspect` -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -30,9 +30,10 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.refs = args - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: completion.ContainerNames(dockerCli, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/kill.go b/cli/command/container/kill.go index cca33f4b4b..1b2f7b34c7 100644 --- a/cli/command/container/kill.go +++ b/cli/command/container/kill.go @@ -32,7 +32,8 @@ func newKillCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container kill, docker kill", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/list.go b/cli/command/container/list.go index f57d25adf9..d485c6a401 100644 --- a/cli/command/container/list.go +++ b/cli/command/container/list.go @@ -43,7 +43,8 @@ func newPsCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "3", "aliases": "docker container ls, docker container list, docker container ps, docker ps", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/logs.go b/cli/command/container/logs.go index 25b70328e7..addd5122d2 100644 --- a/cli/command/container/logs.go +++ b/cli/command/container/logs.go @@ -38,7 +38,8 @@ func newLogsCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container logs, docker logs", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/pause.go b/cli/command/container/pause.go index d43bee239d..a30f2d41a0 100644 --- a/cli/command/container/pause.go +++ b/cli/command/container/pause.go @@ -34,6 +34,7 @@ func newPauseCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr container.Summary) bool { return ctr.State != container.StatePaused }), + DisableFlagsInUseLine: true, } } diff --git a/cli/command/container/port.go b/cli/command/container/port.go index f49a39a225..af9a596680 100644 --- a/cli/command/container/port.go +++ b/cli/command/container/port.go @@ -24,7 +24,7 @@ type portOptions struct { } // newPortCommand creates a new cobra.Command for "docker container port". -func newPortCommand(dockerCli command.Cli) *cobra.Command { +func newPortCommand(dockerCLI command.Cli) *cobra.Command { var opts portOptions cmd := &cobra.Command{ @@ -36,12 +36,13 @@ func newPortCommand(dockerCli command.Cli) *cobra.Command { if len(args) > 1 { opts.port = args[1] } - return runPort(cmd.Context(), dockerCli, &opts) + return runPort(cmd.Context(), dockerCLI, &opts) }, Annotations: map[string]string{ "aliases": "docker container port, docker port", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/container/prune.go b/cli/command/container/prune.go index 1162ac1749..68fa8516b3 100644 --- a/cli/command/container/prune.go +++ b/cli/command/container/prune.go @@ -45,8 +45,9 @@ func newPruneCommand(dockerCLI command.Cli) *cobra.Command { fmt.Fprintln(dockerCLI.Out(), "Total reclaimed space:", units.HumanSize(float64(spaceReclaimed))) return nil }, - Annotations: map[string]string{"version": "1.25"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.25"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/rename.go b/cli/command/container/rename.go index b7b1465a15..53020d1ef5 100644 --- a/cli/command/container/rename.go +++ b/cli/command/container/rename.go @@ -33,7 +33,8 @@ func newRenameCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container rename, docker rename", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/container/restart.go b/cli/command/container/restart.go index 2d2eb87c92..93f88d073f 100644 --- a/cli/command/container/restart.go +++ b/cli/command/container/restart.go @@ -39,7 +39,8 @@ func newRestartCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container restart, docker restart", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/rm.go b/cli/command/container/rm.go index 06432dde38..7ef9acc238 100644 --- a/cli/command/container/rm.go +++ b/cli/command/container/rm.go @@ -40,6 +40,7 @@ func newRmCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: completion.ContainerNames(dockerCLI, true, func(ctr container.Summary) bool { return opts.force || ctr.State == container.StateExited || ctr.State == container.StateCreated }), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/run.go b/cli/command/container/run.go index a2211450ab..6b0d03ac70 100644 --- a/cli/command/container/run.go +++ b/cli/command/container/run.go @@ -48,6 +48,7 @@ func newRunCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "1", "aliases": "docker container run, docker run", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/start.go b/cli/command/container/start.go index 014752ada4..b3d4341d5e 100644 --- a/cli/command/container/start.go +++ b/cli/command/container/start.go @@ -28,7 +28,7 @@ type StartOptions struct { } // newStartCommand creates a new cobra.Command for "docker container start". -func newStartCommand(dockerCli command.Cli) *cobra.Command { +func newStartCommand(dockerCLI command.Cli) *cobra.Command { var opts StartOptions cmd := &cobra.Command{ @@ -37,14 +37,15 @@ func newStartCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.Containers = args - return RunStart(cmd.Context(), dockerCli, &opts) + return RunStart(cmd.Context(), dockerCLI, &opts) }, Annotations: map[string]string{ "aliases": "docker container start, docker start", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(ctr container.Summary) bool { + ValidArgsFunction: completion.ContainerNames(dockerCLI, true, func(ctr container.Summary) bool { return ctr.State == container.StateExited || ctr.State == container.StateCreated }), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/stats.go b/cli/command/container/stats.go index eee267c28e..430a4b63db 100644 --- a/cli/command/container/stats.go +++ b/cli/command/container/stats.go @@ -79,7 +79,8 @@ func newStatsCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container stats, docker stats", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/stop.go b/cli/command/container/stop.go index 43e2633e97..834434f365 100644 --- a/cli/command/container/stop.go +++ b/cli/command/container/stop.go @@ -39,7 +39,8 @@ func newStopCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container stop, docker stop", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/top.go b/cli/command/container/top.go index c517f13483..0d61af2f12 100644 --- a/cli/command/container/top.go +++ b/cli/command/container/top.go @@ -34,7 +34,8 @@ func newTopCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container top, docker top", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/unpause.go b/cli/command/container/unpause.go index 4e8bac8498..58493c1705 100644 --- a/cli/command/container/unpause.go +++ b/cli/command/container/unpause.go @@ -17,7 +17,7 @@ type unpauseOptions struct { } // newUnpauseCommand creates a new cobra.Command for "docker container unpause". -func newUnpauseCommand(dockerCli command.Cli) *cobra.Command { +func newUnpauseCommand(dockerCLI command.Cli) *cobra.Command { var opts unpauseOptions cmd := &cobra.Command{ @@ -26,14 +26,15 @@ func newUnpauseCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args - return runUnpause(cmd.Context(), dockerCli, &opts) + return runUnpause(cmd.Context(), dockerCLI, &opts) }, Annotations: map[string]string{ "aliases": "docker container unpause, docker unpause", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool { + ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr container.Summary) bool { return ctr.State == container.StatePaused }), + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/container/update.go b/cli/command/container/update.go index db1a56e9c8..4c2a7719c3 100644 --- a/cli/command/container/update.go +++ b/cli/command/container/update.go @@ -52,7 +52,8 @@ func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container update, docker update", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + ValidArgsFunction: completion.ContainerNames(dockerCLI, true), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/container/wait.go b/cli/command/container/wait.go index 3678bcf771..afa4633982 100644 --- a/cli/command/container/wait.go +++ b/cli/command/container/wait.go @@ -30,7 +30,8 @@ func newWaitCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container wait, docker wait", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + ValidArgsFunction: completion.ContainerNames(dockerCLI, false), + DisableFlagsInUseLine: true, } return cmd diff --git a/cli/command/context/cmd.go b/cli/command/context/cmd.go index 3ba48a6ccd..44bbb7e3d6 100644 --- a/cli/command/context/cmd.go +++ b/cli/command/context/cmd.go @@ -18,6 +18,8 @@ func newContextCommand(dockerCLI command.Cli) *cobra.Command { Short: "Manage contexts", Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( newCreateCommand(dockerCLI), diff --git a/cli/command/context/create.go b/cli/command/context/create.go index 32dfb00d27..c5514f414b 100644 --- a/cli/command/context/create.go +++ b/cli/command/context/create.go @@ -66,8 +66,9 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command { opts.name = args[0] return runCreate(dockerCLI, &opts) }, - Long: longCreateDescription(), - ValidArgsFunction: cobra.NoFileCompletions, + Long: longCreateDescription(), + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVar(&opts.description, "description", "", "Description of the context") diff --git a/cli/command/context/export.go b/cli/command/context/export.go index 90d5b72320..e6cc6fc3df 100644 --- a/cli/command/context/export.go +++ b/cli/command/context/export.go @@ -35,7 +35,8 @@ func newExportCommand(dockerCLI command.Cli) *cobra.Command { } return runExport(dockerCLI, contextName, dest) }, - ValidArgsFunction: completeContextNames(dockerCLI, 1, true), + ValidArgsFunction: completeContextNames(dockerCLI, 1, true), + DisableFlagsInUseLine: true, } } diff --git a/cli/command/context/import.go b/cli/command/context/import.go index aa7a728e1c..b102fe6969 100644 --- a/cli/command/context/import.go +++ b/cli/command/context/import.go @@ -12,16 +12,17 @@ import ( "github.com/spf13/cobra" ) -func newImportCommand(dockerCli command.Cli) *cobra.Command { +func newImportCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "import CONTEXT FILE|-", Short: "Import a context from a tar or zip file", Args: cli.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - return runImport(dockerCli, args[0], args[1]) + return runImport(dockerCLI, args[0], args[1]) }, // TODO(thaJeztah): this should also include "-" - ValidArgsFunction: completion.FileNames, + ValidArgsFunction: completion.FileNames, + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/context/inspect.go b/cli/command/context/inspect.go index 7900565879..284a6ea914 100644 --- a/cli/command/context/inspect.go +++ b/cli/command/context/inspect.go @@ -35,7 +35,8 @@ func newInspectCommand(dockerCLI command.Cli) *cobra.Command { } return runInspect(dockerCLI, opts) }, - ValidArgsFunction: completeContextNames(dockerCLI, -1, false), + ValidArgsFunction: completeContextNames(dockerCLI, -1, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/context/list.go b/cli/command/context/list.go index dbfe93bf3c..7b6b97a2e5 100644 --- a/cli/command/context/list.go +++ b/cli/command/context/list.go @@ -23,7 +23,7 @@ type listOptions struct { quiet bool } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { opts := &listOptions{} cmd := &cobra.Command{ Use: "ls [OPTIONS]", @@ -31,9 +31,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Short: "List contexts", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(dockerCli, opts) + return runList(dockerCLI, opts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/context/remove.go b/cli/command/context/remove.go index c3397e8b9c..b958ee0fb6 100644 --- a/cli/command/context/remove.go +++ b/cli/command/context/remove.go @@ -32,7 +32,8 @@ func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runRemove(dockerCLI, opts, args) }, - ValidArgsFunction: completeContextNames(dockerCLI, -1, false), + ValidArgsFunction: completeContextNames(dockerCLI, -1, false), + DisableFlagsInUseLine: true, } cmd.Flags().BoolVarP(&opts.force, "force", "f", false, "Force the removal of a context in use") return cmd diff --git a/cli/command/context/show.go b/cli/command/context/show.go index d5e4a828e3..0418444cf2 100644 --- a/cli/command/context/show.go +++ b/cli/command/context/show.go @@ -9,16 +9,17 @@ import ( ) // newShowCommand creates a new cobra.Command for `docker context sow` -func newShowCommand(dockerCli command.Cli) *cobra.Command { +func newShowCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "show", Short: "Print the name of the current context", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - runShow(dockerCli) + runShow(dockerCLI) return nil }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/context/update.go b/cli/command/context/update.go index 2c6a54eda0..c7c2135914 100644 --- a/cli/command/context/update.go +++ b/cli/command/context/update.go @@ -51,8 +51,9 @@ func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { opts.name = args[0] return runUpdate(dockerCLI, &opts) }, - Long: longUpdateDescription(), - ValidArgsFunction: completeContextNames(dockerCLI, 1, false), + Long: longUpdateDescription(), + ValidArgsFunction: completeContextNames(dockerCLI, 1, false), + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVar(&opts.description, "description", "", "Description of the context") diff --git a/cli/command/context/use.go b/cli/command/context/use.go index 0095a0dc93..c411f6d02d 100644 --- a/cli/command/context/use.go +++ b/cli/command/context/use.go @@ -19,7 +19,8 @@ func newUseCommand(dockerCLI command.Cli) *cobra.Command { name := args[0] return runUse(dockerCLI, name) }, - ValidArgsFunction: completeContextNames(dockerCLI, 1, false), + ValidArgsFunction: completeContextNames(dockerCLI, 1, false), + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/image/build.go b/cli/command/image/build.go index acdb566b55..27d4fe39be 100644 --- a/cli/command/image/build.go +++ b/cli/command/image/build.go @@ -88,7 +88,7 @@ func NewBuildCommand(dockerCLI command.Cli) *cobra.Command { } // newBuildCommand creates a new `docker build` command -func newBuildCommand(dockerCli command.Cli) *cobra.Command { +func newBuildCommand(dockerCLI command.Cli) *cobra.Command { options := newBuildOptions() cmd := &cobra.Command{ @@ -97,7 +97,7 @@ func newBuildCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { options.context = args[0] - return runBuild(cmd.Context(), dockerCli, options) + return runBuild(cmd.Context(), dockerCLI, options) }, Annotations: map[string]string{ "category-top": "4", @@ -106,6 +106,7 @@ func newBuildCommand(dockerCli command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return nil, cobra.ShellCompDirectiveFilterDirs }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() @@ -146,7 +147,7 @@ func newBuildCommand(dockerCli command.Cli) *cobra.Command { flags.SetAnnotation("target", annotation.ExternalURL, []string{"https://docs.docker.com/reference/cli/docker/buildx/build/#target"}) flags.StringVar(&options.imageIDFile, "iidfile", "", "Write the image ID to the file") - flags.Bool("disable-content-trust", dockerCli.ContentTrustEnabled(), "Skip image verification (deprecated)") + flags.Bool("disable-content-trust", dockerCLI.ContentTrustEnabled(), "Skip image verification (deprecated)") _ = flags.MarkHidden("disable-content-trust") flags.StringVar(&options.platform, "platform", os.Getenv("DOCKER_DEFAULT_PLATFORM"), "Set platform if server is multi-platform capable") diff --git a/cli/command/image/cmd.go b/cli/command/image/cmd.go index dbc52c6960..aa3a5962f3 100644 --- a/cli/command/image/cmd.go +++ b/cli/command/image/cmd.go @@ -28,6 +28,8 @@ func newImageCommand(dockerCli command.Cli) *cobra.Command { Short: "Manage images", Args: cli.NoArgs, RunE: command.ShowHelp(dockerCli.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( newBuildCommand(dockerCli), diff --git a/cli/command/image/history.go b/cli/command/image/history.go index 2214f818e6..4f166144ef 100644 --- a/cli/command/image/history.go +++ b/cli/command/image/history.go @@ -40,6 +40,7 @@ func newHistoryCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker image history, docker history", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/import.go b/cli/command/image/import.go index 74bb7c60c3..bc1b311737 100644 --- a/cli/command/image/import.go +++ b/cli/command/image/import.go @@ -40,6 +40,7 @@ func newImportCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker image import, docker import", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/inspect.go b/cli/command/image/inspect.go index bd73a2e430..99784dd822 100644 --- a/cli/command/image/inspect.go +++ b/cli/command/image/inspect.go @@ -26,7 +26,7 @@ type inspectOptions struct { } // newInspectCommand creates a new cobra.Command for `docker image inspect` -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -35,9 +35,10 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.refs = args - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: completion.ImageNames(dockerCli, -1), + ValidArgsFunction: completion.ImageNames(dockerCLI, -1), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/list.go b/cli/command/image/list.go index 5c8c6e181f..3cf1988405 100644 --- a/cli/command/image/list.go +++ b/cli/command/image/list.go @@ -51,6 +51,7 @@ func newImagesCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "7", "aliases": "docker image ls, docker image list, docker images", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/load.go b/cli/command/image/load.go index 572f335a63..0abca52fb8 100644 --- a/cli/command/image/load.go +++ b/cli/command/image/load.go @@ -36,7 +36,8 @@ func newLoadCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker image load, docker load", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/prune.go b/cli/command/image/prune.go index 790abefa13..e02b006e9c 100644 --- a/cli/command/image/prune.go +++ b/cli/command/image/prune.go @@ -48,8 +48,9 @@ func newPruneCommand(dockerCLI command.Cli) *cobra.Command { fmt.Fprintln(dockerCLI.Out(), "Total reclaimed space:", units.HumanSize(float64(spaceReclaimed))) return nil }, - Annotations: map[string]string{"version": "1.25"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.25"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/pull.go b/cli/command/image/pull.go index ce441ba235..57655cf200 100644 --- a/cli/command/image/pull.go +++ b/cli/command/image/pull.go @@ -38,7 +38,8 @@ func newPullCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "5", "aliases": "docker image pull, docker pull", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/push.go b/cli/command/image/push.go index e7475cbab3..6fcea53c3a 100644 --- a/cli/command/image/push.go +++ b/cli/command/image/push.go @@ -51,7 +51,8 @@ func newPushCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "6", "aliases": "docker image push, docker push", }, - ValidArgsFunction: completion.ImageNames(dockerCLI, 1), + ValidArgsFunction: completion.ImageNames(dockerCLI, 1), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/remove.go b/cli/command/image/remove.go index 61a2cdfa28..a251a7658b 100644 --- a/cli/command/image/remove.go +++ b/cli/command/image/remove.go @@ -35,6 +35,7 @@ func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker image rm, docker image remove, docker rmi", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/save.go b/cli/command/image/save.go index 4c14f712bf..11986feb31 100644 --- a/cli/command/image/save.go +++ b/cli/command/image/save.go @@ -36,7 +36,8 @@ func newSaveCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker image save, docker save", }, - ValidArgsFunction: completion.ImageNames(dockerCLI, -1), + ValidArgsFunction: completion.ImageNames(dockerCLI, -1), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/image/tag.go b/cli/command/image/tag.go index 01d57909c7..1c40fddac2 100644 --- a/cli/command/image/tag.go +++ b/cli/command/image/tag.go @@ -15,7 +15,7 @@ type tagOptions struct { } // newTagCommand creates a new "docker image tag" command. -func newTagCommand(dockerCli command.Cli) *cobra.Command { +func newTagCommand(dockerCLI command.Cli) *cobra.Command { var opts tagOptions cmd := &cobra.Command{ @@ -25,12 +25,13 @@ func newTagCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { opts.image = args[0] opts.name = args[1] - return runTag(cmd.Context(), dockerCli, opts) + return runTag(cmd.Context(), dockerCLI, opts) }, Annotations: map[string]string{ "aliases": "docker image tag, docker tag", }, - ValidArgsFunction: completion.ImageNames(dockerCli, 2), + ValidArgsFunction: completion.ImageNames(dockerCLI, 2), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/manifest/annotate.go b/cli/command/manifest/annotate.go index e5f49fc1c8..a881a80201 100644 --- a/cli/command/manifest/annotate.go +++ b/cli/command/manifest/annotate.go @@ -57,7 +57,7 @@ func newRegistryClient(dockerCLI command.Cli, allowInsecure bool) registryclient } // NewAnnotateCommand creates a new `docker manifest annotate` command -func newAnnotateCommand(dockerCli command.Cli) *cobra.Command { +func newAnnotateCommand(dockerCLI command.Cli) *cobra.Command { var opts annotateOptions cmd := &cobra.Command{ @@ -67,8 +67,9 @@ func newAnnotateCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { opts.target = args[0] opts.image = args[1] - return runManifestAnnotate(dockerCli, opts) + return runManifestAnnotate(dockerCLI, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/manifest/cmd.go b/cli/command/manifest/cmd.go index 345a799dd4..ee254c9189 100644 --- a/cli/command/manifest/cmd.go +++ b/cli/command/manifest/cmd.go @@ -25,7 +25,8 @@ func newManifestCommand(dockerCLI command.Cli) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { _, _ = fmt.Fprint(dockerCLI.Err(), "\n"+cmd.UsageString()) }, - Annotations: map[string]string{"experimentalCLI": ""}, + Annotations: map[string]string{"experimentalCLI": ""}, + DisableFlagsInUseLine: true, } cmd.AddCommand( newCreateListCommand(dockerCLI), diff --git a/cli/command/manifest/create_list.go b/cli/command/manifest/create_list.go index feee2bb38e..1fff5660d0 100644 --- a/cli/command/manifest/create_list.go +++ b/cli/command/manifest/create_list.go @@ -16,7 +16,7 @@ type createOpts struct { insecure bool } -func newCreateListCommand(dockerCli command.Cli) *cobra.Command { +func newCreateListCommand(dockerCLI command.Cli) *cobra.Command { opts := createOpts{} cmd := &cobra.Command{ @@ -24,8 +24,9 @@ func newCreateListCommand(dockerCli command.Cli) *cobra.Command { Short: "Create a local manifest list for annotating and pushing to a registry", Args: cli.RequiresMinArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - return createManifestList(cmd.Context(), dockerCli, args, opts) + return createManifestList(cmd.Context(), dockerCLI, args, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/manifest/inspect.go b/cli/command/manifest/inspect.go index bde77c4bd5..b4beff3877 100644 --- a/cli/command/manifest/inspect.go +++ b/cli/command/manifest/inspect.go @@ -22,7 +22,7 @@ type inspectOptions struct { } // NewInspectCommand creates a new `docker manifest inspect` command -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -37,8 +37,9 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { opts.list = args[0] opts.ref = args[1] } - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/manifest/push.go b/cli/command/manifest/push.go index 09ce1ee26d..024bf6e025 100644 --- a/cli/command/manifest/push.go +++ b/cli/command/manifest/push.go @@ -42,7 +42,7 @@ type pushRequest struct { insecure bool } -func newPushListCommand(dockerCli command.Cli) *cobra.Command { +func newPushListCommand(dockerCLI command.Cli) *cobra.Command { opts := pushOpts{} cmd := &cobra.Command{ @@ -51,8 +51,9 @@ func newPushListCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.target = args[0] - return runPush(cmd.Context(), dockerCli, opts) + return runPush(cmd.Context(), dockerCLI, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/manifest/rm.go b/cli/command/manifest/rm.go index dda4e3e489..38bb059e5a 100644 --- a/cli/command/manifest/rm.go +++ b/cli/command/manifest/rm.go @@ -18,6 +18,7 @@ func newRmManifestListCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runRemove(cmd.Context(), newManifestStore(dockerCLI), args) }, + DisableFlagsInUseLine: true, } return cmd diff --git a/cli/command/network/cmd.go b/cli/command/network/cmd.go index 5f9603fd43..7f4ec64e1f 100644 --- a/cli/command/network/cmd.go +++ b/cli/command/network/cmd.go @@ -19,6 +19,8 @@ func newNetworkCommand(dockerCLI command.Cli) *cobra.Command { Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), Annotations: map[string]string{"version": "1.21"}, + + DisableFlagsInUseLine: true, } cmd.AddCommand( newConnectCommand(dockerCLI), diff --git a/cli/command/network/connect.go b/cli/command/network/connect.go index 100318ead9..dc9d96ae50 100644 --- a/cli/command/network/connect.go +++ b/cli/command/network/connect.go @@ -47,6 +47,7 @@ func newConnectCommand(dockerCLI command.Cli) *cobra.Command { nw := args[0] return completion.ContainerNames(dockerCLI, true, not(isConnected(nw)))(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/network/create.go b/cli/command/network/create.go index 26988ab13e..e0798584d4 100644 --- a/cli/command/network/create.go +++ b/cli/command/network/create.go @@ -68,7 +68,8 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command { return runCreate(cmd.Context(), dockerCLI.Client(), dockerCLI.Out(), options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/network/disconnect.go b/cli/command/network/disconnect.go index 40c8914da9..f2b6c80ecf 100644 --- a/cli/command/network/disconnect.go +++ b/cli/command/network/disconnect.go @@ -17,7 +17,7 @@ type disconnectOptions struct { force bool } -func newDisconnectCommand(dockerCli command.Cli) *cobra.Command { +func newDisconnectCommand(dockerCLI command.Cli) *cobra.Command { opts := disconnectOptions{} cmd := &cobra.Command{ @@ -27,15 +27,16 @@ func newDisconnectCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { opts.network = args[0] opts.container = args[1] - return runDisconnect(cmd.Context(), dockerCli.Client(), opts) + return runDisconnect(cmd.Context(), dockerCLI.Client(), opts) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { if len(args) == 0 { - return completion.NetworkNames(dockerCli)(cmd, args, toComplete) + return completion.NetworkNames(dockerCLI)(cmd, args, toComplete) } network := args[0] - return completion.ContainerNames(dockerCli, true, isConnected(network))(cmd, args, toComplete) + return completion.ContainerNames(dockerCLI, true, isConnected(network))(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/network/inspect.go b/cli/command/network/inspect.go index 51ef3bedcf..f57b94ee91 100644 --- a/cli/command/network/inspect.go +++ b/cli/command/network/inspect.go @@ -33,7 +33,8 @@ func newInspectCommand(dockerCLI command.Cli) *cobra.Command { opts.names = args return runInspect(cmd.Context(), dockerCLI.Client(), dockerCLI.Out(), opts) }, - ValidArgsFunction: completion.NetworkNames(dockerCLI), + ValidArgsFunction: completion.NetworkNames(dockerCLI), + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/network/list.go b/cli/command/network/list.go index eb412d83e5..049d6138b7 100644 --- a/cli/command/network/list.go +++ b/cli/command/network/list.go @@ -21,7 +21,7 @@ type listOptions struct { filter opts.FilterOpt } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { options := listOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -30,9 +30,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Short: "List networks", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context(), dockerCli, options) + return runList(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/network/prune.go b/cli/command/network/prune.go index 3447530892..d2f5911cd8 100644 --- a/cli/command/network/prune.go +++ b/cli/command/network/prune.go @@ -43,7 +43,8 @@ func newPruneCommand(dockerCLI command.Cli) *cobra.Command { } return nil }, - Annotations: map[string]string{"version": "1.25"}, + Annotations: map[string]string{"version": "1.25"}, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/network/remove.go b/cli/command/network/remove.go index 1694c6cf3d..9b422ae3be 100644 --- a/cli/command/network/remove.go +++ b/cli/command/network/remove.go @@ -18,7 +18,7 @@ type removeOptions struct { force bool } -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { var opts removeOptions cmd := &cobra.Command{ @@ -27,9 +27,10 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { Short: "Remove one or more networks", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runRemove(cmd.Context(), dockerCli, args, &opts) + return runRemove(cmd.Context(), dockerCLI, args, &opts) }, - ValidArgsFunction: completion.NetworkNames(dockerCli), + ValidArgsFunction: completion.NetworkNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/node/cmd.go b/cli/command/node/cmd.go index c9df158900..e428b4659a 100644 --- a/cli/command/node/cmd.go +++ b/cli/command/node/cmd.go @@ -26,6 +26,7 @@ func newNodeCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.24", "swarm": "manager", }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newDemoteCommand(dockerCLI), diff --git a/cli/command/node/demote.go b/cli/command/node/demote.go index f6a5b5a719..1941c6f241 100644 --- a/cli/command/node/demote.go +++ b/cli/command/node/demote.go @@ -10,15 +10,16 @@ import ( "github.com/spf13/cobra" ) -func newDemoteCommand(dockerCli command.Cli) *cobra.Command { +func newDemoteCommand(dockerCLI command.Cli) *cobra.Command { return &cobra.Command{ Use: "demote NODE [NODE...]", Short: "Demote one or more nodes from manager in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runDemote(cmd.Context(), dockerCli, args) + return runDemote(cmd.Context(), dockerCLI, args) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } } diff --git a/cli/command/node/inspect.go b/cli/command/node/inspect.go index 1ef4777f4d..e68d5ed0d9 100644 --- a/cli/command/node/inspect.go +++ b/cli/command/node/inspect.go @@ -21,7 +21,7 @@ type inspectOptions struct { pretty bool } -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -30,9 +30,10 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.nodeIds = args - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/node/list.go b/cli/command/node/list.go index b5737cfad0..78c6c430d1 100644 --- a/cli/command/node/list.go +++ b/cli/command/node/list.go @@ -22,7 +22,7 @@ type listOptions struct { filter opts.FilterOpt } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { options := listOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -31,9 +31,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Short: "List nodes in the swarm", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context(), dockerCli, options) + return runList(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&options.quiet, "quiet", "q", false, "Only display IDs") diff --git a/cli/command/node/promote.go b/cli/command/node/promote.go index 33137f122d..fb4da49fef 100644 --- a/cli/command/node/promote.go +++ b/cli/command/node/promote.go @@ -10,15 +10,16 @@ import ( "github.com/spf13/cobra" ) -func newPromoteCommand(dockerCli command.Cli) *cobra.Command { +func newPromoteCommand(dockerCLI command.Cli) *cobra.Command { return &cobra.Command{ Use: "promote NODE [NODE...]", Short: "Promote one or more nodes to manager in the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runPromote(cmd.Context(), dockerCli, args) + return runPromote(cmd.Context(), dockerCLI, args) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } } diff --git a/cli/command/node/ps.go b/cli/command/node/ps.go index 85a286c985..8dd6949657 100644 --- a/cli/command/node/ps.go +++ b/cli/command/node/ps.go @@ -25,7 +25,7 @@ type psOptions struct { filter opts.FilterOpt } -func newPsCommand(dockerCli command.Cli) *cobra.Command { +func newPsCommand(dockerCLI command.Cli) *cobra.Command { options := psOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -39,9 +39,10 @@ func newPsCommand(dockerCli command.Cli) *cobra.Command { options.nodeIDs = args } - return runPs(cmd.Context(), dockerCli, options) + return runPs(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVar(&options.noTrunc, "no-trunc", false, "Do not truncate output") diff --git a/cli/command/node/remove.go b/cli/command/node/remove.go index b9a4a96ea8..84257bbdb6 100644 --- a/cli/command/node/remove.go +++ b/cli/command/node/remove.go @@ -15,7 +15,7 @@ type removeOptions struct { force bool } -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { opts := removeOptions{} cmd := &cobra.Command{ @@ -24,9 +24,10 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { Short: "Remove one or more nodes from the swarm", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runRemove(cmd.Context(), dockerCli, args, opts) + return runRemove(cmd.Context(), dockerCLI, args, opts) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&opts.force, "force", "f", false, "Force remove a node from the swarm") diff --git a/cli/command/node/update.go b/cli/command/node/update.go index fadae9cd89..63a66a4193 100644 --- a/cli/command/node/update.go +++ b/cli/command/node/update.go @@ -17,7 +17,7 @@ import ( var errNoRoleChange = errors.New("role was already set to the requested value") -func newUpdateCommand(dockerCli command.Cli) *cobra.Command { +func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { options := newNodeOptions() cmd := &cobra.Command{ @@ -25,9 +25,10 @@ func newUpdateCommand(dockerCli command.Cli) *cobra.Command { Short: "Update a node", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runUpdate(cmd.Context(), dockerCli, cmd.Flags(), args[0]) + return runUpdate(cmd.Context(), dockerCLI, cmd.Flags(), args[0]) }, - ValidArgsFunction: completeNodeNames(dockerCli), + ValidArgsFunction: completeNodeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/cmd.go b/cli/command/plugin/cmd.go index ca7e0dcf99..653e163d88 100644 --- a/cli/command/plugin/cmd.go +++ b/cli/command/plugin/cmd.go @@ -19,6 +19,8 @@ func newPluginCommand(dockerCLI command.Cli) *cobra.Command { Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), Annotations: map[string]string{"version": "1.25"}, + + DisableFlagsInUseLine: true, } cmd.AddCommand( diff --git a/cli/command/plugin/create.go b/cli/command/plugin/create.go index 96e62ae036..eb618758ad 100644 --- a/cli/command/plugin/create.go +++ b/cli/command/plugin/create.go @@ -64,7 +64,7 @@ type pluginCreateOptions struct { compress bool } -func newCreateCommand(dockerCli command.Cli) *cobra.Command { +func newCreateCommand(dockerCLI command.Cli) *cobra.Command { options := pluginCreateOptions{} cmd := &cobra.Command{ @@ -74,9 +74,10 @@ func newCreateCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { options.repoName = args[0] options.context = args[1] - return runCreate(cmd.Context(), dockerCli, options) + return runCreate(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/disable.go b/cli/command/plugin/disable.go index 9dea678f53..b340c9217e 100644 --- a/cli/command/plugin/disable.go +++ b/cli/command/plugin/disable.go @@ -24,6 +24,7 @@ func newDisableCommand(dockerCLI command.Cli) *cobra.Command { _, _ = fmt.Fprintln(dockerCLI.Out(), name) return nil }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/enable.go b/cli/command/plugin/enable.go index f1b67d7828..03ea9d56c1 100644 --- a/cli/command/plugin/enable.go +++ b/cli/command/plugin/enable.go @@ -11,7 +11,7 @@ import ( "github.com/spf13/cobra" ) -func newEnableCommand(dockerCli command.Cli) *cobra.Command { +func newEnableCommand(dockerCLI command.Cli) *cobra.Command { var opts client.PluginEnableOptions cmd := &cobra.Command{ @@ -20,12 +20,13 @@ func newEnableCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { name := args[0] - if err := runEnable(cmd.Context(), dockerCli, name, opts); err != nil { + if err := runEnable(cmd.Context(), dockerCLI, name, opts); err != nil { return err } - _, _ = fmt.Fprintln(dockerCli.Out(), name) + _, _ = fmt.Fprintln(dockerCLI.Out(), name) return nil }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/inspect.go b/cli/command/plugin/inspect.go index 289fe94f5e..f93a3cdfc2 100644 --- a/cli/command/plugin/inspect.go +++ b/cli/command/plugin/inspect.go @@ -18,7 +18,7 @@ type inspectOptions struct { format string } -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -27,8 +27,9 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.pluginNames = args - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/install.go b/cli/command/plugin/install.go index da86dba9dd..6175e66672 100644 --- a/cli/command/plugin/install.go +++ b/cli/command/plugin/install.go @@ -25,7 +25,7 @@ type pluginOptions struct { skipRemoteCheck bool } -func newInstallCommand(dockerCli command.Cli) *cobra.Command { +func newInstallCommand(dockerCLI command.Cli) *cobra.Command { var options pluginOptions cmd := &cobra.Command{ Use: "install [OPTIONS] PLUGIN [KEY=VALUE...]", @@ -36,15 +36,16 @@ func newInstallCommand(dockerCli command.Cli) *cobra.Command { if len(args) > 1 { options.args = args[1:] } - return runInstall(cmd.Context(), dockerCli, options) + return runInstall(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVar(&options.grantPerms, "grant-all-permissions", false, "Grant all permissions necessary to run the plugin") flags.BoolVar(&options.disable, "disable", false, "Do not enable the plugin on install") flags.StringVar(&options.localName, "alias", "", "Local name for plugin") - flags.Bool("disable-content-trust", dockerCli.ContentTrustEnabled(), "Skip image verification (deprecated)") + flags.Bool("disable-content-trust", dockerCLI.ContentTrustEnabled(), "Skip image verification (deprecated)") _ = flags.MarkHidden("disable-content-trust") return cmd } diff --git a/cli/command/plugin/list.go b/cli/command/plugin/list.go index 8552167146..401b356926 100644 --- a/cli/command/plugin/list.go +++ b/cli/command/plugin/list.go @@ -20,7 +20,7 @@ type listOptions struct { filter opts.FilterOpt } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { options := listOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -29,9 +29,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Aliases: []string{"list"}, Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context(), dockerCli, options) + return runList(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/push.go b/cli/command/plugin/push.go index a4a830f41e..f990b9ecc6 100644 --- a/cli/command/plugin/push.go +++ b/cli/command/plugin/push.go @@ -20,6 +20,7 @@ func newPushCommand(dockerCLI command.Cli) *cobra.Command { name := args[0] return runPush(cmd.Context(), dockerCLI, name) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/remove.go b/cli/command/plugin/remove.go index 80d3e9dd3b..610844f2b2 100644 --- a/cli/command/plugin/remove.go +++ b/cli/command/plugin/remove.go @@ -17,7 +17,7 @@ type rmOptions struct { plugins []string } -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { var opts rmOptions cmd := &cobra.Command{ @@ -27,8 +27,9 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.plugins = args - return runRemove(cmd.Context(), dockerCli, &opts) + return runRemove(cmd.Context(), dockerCLI, &opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/plugin/set.go b/cli/command/plugin/set.go index 2d1eecc0ad..231da9a663 100644 --- a/cli/command/plugin/set.go +++ b/cli/command/plugin/set.go @@ -6,13 +6,14 @@ import ( "github.com/spf13/cobra" ) -func newSetCommand(dockerCli command.Cli) *cobra.Command { +func newSetCommand(dockerCLI command.Cli) *cobra.Command { return &cobra.Command{ Use: "set PLUGIN KEY=VALUE [KEY=VALUE...]", Short: "Change settings for a plugin", Args: cli.RequiresMinArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - return dockerCli.Client().PluginSet(cmd.Context(), args[0], args[1:]) + return dockerCLI.Client().PluginSet(cmd.Context(), args[0], args[1:]) }, + DisableFlagsInUseLine: true, } } diff --git a/cli/command/plugin/upgrade.go b/cli/command/plugin/upgrade.go index 0e7ca9aca3..daf097dd01 100644 --- a/cli/command/plugin/upgrade.go +++ b/cli/command/plugin/upgrade.go @@ -14,7 +14,7 @@ import ( "github.com/spf13/cobra" ) -func newUpgradeCommand(dockerCli command.Cli) *cobra.Command { +func newUpgradeCommand(dockerCLI command.Cli) *cobra.Command { var options pluginOptions cmd := &cobra.Command{ Use: "upgrade [OPTIONS] PLUGIN [REMOTE]", @@ -25,14 +25,15 @@ func newUpgradeCommand(dockerCli command.Cli) *cobra.Command { if len(args) == 2 { options.remote = args[1] } - return runUpgrade(cmd.Context(), dockerCli, options) + return runUpgrade(cmd.Context(), dockerCLI, options) }, - Annotations: map[string]string{"version": "1.26"}, + Annotations: map[string]string{"version": "1.26"}, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVar(&options.grantPerms, "grant-all-permissions", false, "Grant all permissions necessary to run the plugin") - flags.Bool("disable-content-trust", dockerCli.ContentTrustEnabled(), "Skip image verification (deprecated)") + flags.Bool("disable-content-trust", dockerCLI.ContentTrustEnabled(), "Skip image verification (deprecated)") _ = flags.MarkHidden("disable-content-trust") flags.BoolVar(&options.skipRemoteCheck, "skip-remote-check", false, "Do not check if specified remote plugin matches existing plugin image") return cmd diff --git a/cli/command/registry/login.go b/cli/command/registry/login.go index be07683308..d4a9f58e58 100644 --- a/cli/command/registry/login.go +++ b/cli/command/registry/login.go @@ -56,7 +56,8 @@ func newLoginCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "category-top": "8", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/registry/logout.go b/cli/command/registry/logout.go index aa5a4970cd..16218f67d9 100644 --- a/cli/command/registry/logout.go +++ b/cli/command/registry/logout.go @@ -34,6 +34,7 @@ func newLogoutCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "category-top": "9", }, + DisableFlagsInUseLine: true, // TODO (thaJeztah) add completion for registries we have authentication stored for } diff --git a/cli/command/registry/search.go b/cli/command/registry/search.go index fe3cfc0578..c1ca5ce0f8 100644 --- a/cli/command/registry/search.go +++ b/cli/command/registry/search.go @@ -43,6 +43,7 @@ func newSearchCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "category-top": "10", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/secret/cmd.go b/cli/command/secret/cmd.go index 12abe6b450..41b2c56f3d 100644 --- a/cli/command/secret/cmd.go +++ b/cli/command/secret/cmd.go @@ -24,6 +24,7 @@ func newSecretCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.25", "swarm": "manager", }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newSecretListCommand(dockerCLI), diff --git a/cli/command/secret/create.go b/cli/command/secret/create.go index bdb2cb7ba8..6216d5ee17 100644 --- a/cli/command/secret/create.go +++ b/cli/command/secret/create.go @@ -22,7 +22,7 @@ type createOptions struct { labels opts.ListOpts } -func newSecretCreateCommand(dockerCli command.Cli) *cobra.Command { +func newSecretCreateCommand(dockerCLI command.Cli) *cobra.Command { options := createOptions{ labels: opts.NewListOpts(opts.ValidateLabel), } @@ -36,8 +36,9 @@ func newSecretCreateCommand(dockerCli command.Cli) *cobra.Command { if len(args) == 2 { options.file = args[1] } - return runSecretCreate(cmd.Context(), dockerCli, options) + return runSecretCreate(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.VarP(&options.labels, "label", "l", "Secret labels") diff --git a/cli/command/secret/inspect.go b/cli/command/secret/inspect.go index fea34f2e0a..518b1f528a 100644 --- a/cli/command/secret/inspect.go +++ b/cli/command/secret/inspect.go @@ -21,7 +21,7 @@ type inspectOptions struct { pretty bool } -func newSecretInspectCommand(dockerCli command.Cli) *cobra.Command { +func newSecretInspectCommand(dockerCLI command.Cli) *cobra.Command { opts := inspectOptions{} cmd := &cobra.Command{ Use: "inspect [OPTIONS] SECRET [SECRET...]", @@ -29,11 +29,12 @@ func newSecretInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.names = args - return runSecretInspect(cmd.Context(), dockerCli, opts) + return runSecretInspect(cmd.Context(), dockerCLI, opts) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return completeNames(dockerCli)(cmd, args, toComplete) + return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/secret/ls.go b/cli/command/secret/ls.go index b30106f67b..ece13b39c1 100644 --- a/cli/command/secret/ls.go +++ b/cli/command/secret/ls.go @@ -20,7 +20,7 @@ type listOptions struct { filter opts.FilterOpt } -func newSecretListCommand(dockerCli command.Cli) *cobra.Command { +func newSecretListCommand(dockerCLI command.Cli) *cobra.Command { options := listOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -29,11 +29,12 @@ func newSecretListCommand(dockerCli command.Cli) *cobra.Command { Short: "List secrets", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runSecretList(cmd.Context(), dockerCli, options) + return runSecretList(cmd.Context(), dockerCLI, options) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return completeNames(dockerCli)(cmd, args, toComplete) + return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/secret/remove.go b/cli/command/secret/remove.go index 2a2764a8e3..7705490295 100644 --- a/cli/command/secret/remove.go +++ b/cli/command/secret/remove.go @@ -29,6 +29,7 @@ func newSecretRemoveCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } } diff --git a/cli/command/service/cmd.go b/cli/command/service/cmd.go index 583d3530be..1620edc19f 100644 --- a/cli/command/service/cmd.go +++ b/cli/command/service/cmd.go @@ -22,6 +22,7 @@ func newServiceCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.24", "swarm": "manager", }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newCreateCommand(dockerCLI), diff --git a/cli/command/service/create.go b/cli/command/service/create.go index 05e81f16ee..3037a7943f 100644 --- a/cli/command/service/create.go +++ b/cli/command/service/create.go @@ -29,7 +29,8 @@ func newCreateCommand(dockerCLI command.Cli) *cobra.Command { } return runCreate(cmd.Context(), dockerCLI, cmd.Flags(), opts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVar(&opts.mode, flagMode, "replicated", `Service mode ("replicated", "global", "replicated-job", "global-job")`) diff --git a/cli/command/service/inspect.go b/cli/command/service/inspect.go index 224d94c245..6afa2ccdba 100644 --- a/cli/command/service/inspect.go +++ b/cli/command/service/inspect.go @@ -24,7 +24,7 @@ type inspectOptions struct { pretty bool } -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -37,9 +37,10 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { if opts.pretty && len(opts.format) > 0 { return errors.Errorf("--format is incompatible with human friendly format") } - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: completeServiceNames(dockerCli), + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/service/list.go b/cli/command/service/list.go index 8db8fbaff3..ed8aa85c63 100644 --- a/cli/command/service/list.go +++ b/cli/command/service/list.go @@ -32,7 +32,8 @@ func newListCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runList(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/service/logs.go b/cli/command/service/logs.go index a9b3c2323e..ab9352f0f6 100644 --- a/cli/command/service/logs.go +++ b/cli/command/service/logs.go @@ -38,7 +38,7 @@ type logsOptions struct { target string } -func newLogsCommand(dockerCli command.Cli) *cobra.Command { +func newLogsCommand(dockerCLI command.Cli) *cobra.Command { var opts logsOptions cmd := &cobra.Command{ @@ -47,10 +47,11 @@ func newLogsCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.target = args[0] - return runLogs(cmd.Context(), dockerCli, &opts) + return runLogs(cmd.Context(), dockerCLI, &opts) }, - Annotations: map[string]string{"version": "1.29"}, - ValidArgsFunction: completeServiceNames(dockerCli), + Annotations: map[string]string{"version": "1.29"}, + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/service/ps.go b/cli/command/service/ps.go index b7e4fdd4cf..4d24ce1ca8 100644 --- a/cli/command/service/ps.go +++ b/cli/command/service/ps.go @@ -26,7 +26,7 @@ type psOptions struct { filter opts.FilterOpt } -func newPsCommand(dockerCli command.Cli) *cobra.Command { +func newPsCommand(dockerCLI command.Cli) *cobra.Command { options := psOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -35,9 +35,10 @@ func newPsCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { options.services = args - return runPS(cmd.Context(), dockerCli, options) + return runPS(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: completeServiceNames(dockerCli), + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&options.quiet, "quiet", "q", false, "Only display task IDs") diff --git a/cli/command/service/remove.go b/cli/command/service/remove.go index 522dd91cd5..eacf43e384 100644 --- a/cli/command/service/remove.go +++ b/cli/command/service/remove.go @@ -10,16 +10,17 @@ import ( "github.com/spf13/cobra" ) -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "rm SERVICE [SERVICE...]", Aliases: []string{"remove"}, Short: "Remove one or more services", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runRemove(cmd.Context(), dockerCli, args) + return runRemove(cmd.Context(), dockerCLI, args) }, - ValidArgsFunction: completeServiceNames(dockerCli), + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } cmd.Flags() diff --git a/cli/command/service/rollback.go b/cli/command/service/rollback.go index 935ca632b3..6420f79a20 100644 --- a/cli/command/service/rollback.go +++ b/cli/command/service/rollback.go @@ -12,7 +12,7 @@ import ( "github.com/spf13/pflag" ) -func newRollbackCommand(dockerCli command.Cli) *cobra.Command { +func newRollbackCommand(dockerCLI command.Cli) *cobra.Command { options := newServiceOptions() cmd := &cobra.Command{ @@ -20,10 +20,11 @@ func newRollbackCommand(dockerCli command.Cli) *cobra.Command { Short: "Revert changes to a service's configuration", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runRollback(cmd.Context(), dockerCli, options, args[0]) + return runRollback(cmd.Context(), dockerCLI, options, args[0]) }, - Annotations: map[string]string{"version": "1.31"}, - ValidArgsFunction: completeServiceNames(dockerCli), + Annotations: map[string]string{"version": "1.31"}, + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/service/scale.go b/cli/command/service/scale.go index 9c1653e523..34efd28305 100644 --- a/cli/command/service/scale.go +++ b/cli/command/service/scale.go @@ -18,7 +18,7 @@ type scaleOptions struct { detach bool } -func newScaleCommand(dockerCli command.Cli) *cobra.Command { +func newScaleCommand(dockerCLI command.Cli) *cobra.Command { options := &scaleOptions{} cmd := &cobra.Command{ @@ -26,9 +26,10 @@ func newScaleCommand(dockerCli command.Cli) *cobra.Command { Short: "Scale one or multiple replicated services", Args: scaleArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runScale(cmd.Context(), dockerCli, options, args) + return runScale(cmd.Context(), dockerCLI, options, args) }, - ValidArgsFunction: completeScaleArgs(dockerCli), + ValidArgsFunction: completeScaleArgs(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/service/update.go b/cli/command/service/update.go index 54f6a7f381..9603d1d998 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -33,7 +33,8 @@ func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runUpdate(cmd.Context(), dockerCLI, cmd.Flags(), options, args[0]) }, - ValidArgsFunction: completeServiceNames(dockerCLI), + ValidArgsFunction: completeServiceNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/stack/cmd.go b/cli/command/stack/cmd.go index 85af208f76..169230d0a8 100644 --- a/cli/command/stack/cmd.go +++ b/cli/command/stack/cmd.go @@ -26,6 +26,7 @@ func newStackCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.25", "swarm": "manager", }, + DisableFlagsInUseLine: true, } defaultHelpFunc := cmd.HelpFunc() cmd.SetHelpFunc(func(c *cobra.Command, args []string) { diff --git a/cli/command/stack/config.go b/cli/command/stack/config.go index 9af8acf103..462aa447b6 100644 --- a/cli/command/stack/config.go +++ b/cli/command/stack/config.go @@ -14,7 +14,7 @@ import ( "gopkg.in/yaml.v3" ) -func newConfigCommand(dockerCli command.Cli) *cobra.Command { +func newConfigCommand(dockerCLI command.Cli) *cobra.Command { var opts options.Config cmd := &cobra.Command{ @@ -22,7 +22,7 @@ func newConfigCommand(dockerCli command.Cli) *cobra.Command { Short: "Outputs the final config file, after doing merges and interpolations", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - configDetails, err := loader.GetConfigDetails(opts.Composefiles, dockerCli.In()) + configDetails, err := loader.GetConfigDetails(opts.Composefiles, dockerCLI.In()) if err != nil { return err } @@ -32,10 +32,11 @@ func newConfigCommand(dockerCli command.Cli) *cobra.Command { return err } - _, err = fmt.Fprintf(dockerCli.Out(), "%s", cfg) + _, err = fmt.Fprintf(dockerCLI.Out(), "%s", cfg) return err }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/stack/deploy.go b/cli/command/stack/deploy.go index bb7058dd34..82301d514c 100644 --- a/cli/command/stack/deploy.go +++ b/cli/command/stack/deploy.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/cobra" ) -func newDeployCommand(dockerCli command.Cli) *cobra.Command { +func newDeployCommand(dockerCLI command.Cli) *cobra.Command { var opts options.Deploy cmd := &cobra.Command{ @@ -22,15 +22,16 @@ func newDeployCommand(dockerCli command.Cli) *cobra.Command { if err := validateStackName(opts.Namespace); err != nil { return err } - config, err := loader.LoadComposefile(dockerCli, opts) + config, err := loader.LoadComposefile(dockerCLI, opts) if err != nil { return err } - return swarm.RunDeploy(cmd.Context(), dockerCli, cmd.Flags(), &opts, config) + return swarm.RunDeploy(cmd.Context(), dockerCLI, cmd.Flags(), &opts, config) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return completeNames(dockerCli)(cmd, args, toComplete) + return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/stack/list.go b/cli/command/stack/list.go index 084b6aab3c..a8f1dca769 100644 --- a/cli/command/stack/list.go +++ b/cli/command/stack/list.go @@ -30,7 +30,8 @@ func newListCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runList(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/stack/ps.go b/cli/command/stack/ps.go index 1e9ddd12bc..1def911561 100644 --- a/cli/command/stack/ps.go +++ b/cli/command/stack/ps.go @@ -41,6 +41,7 @@ func newPsCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate output") diff --git a/cli/command/stack/remove.go b/cli/command/stack/remove.go index 18ad5a25bf..d38df7cf49 100644 --- a/cli/command/stack/remove.go +++ b/cli/command/stack/remove.go @@ -8,7 +8,7 @@ import ( "github.com/spf13/cobra" ) -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { var opts options.Remove cmd := &cobra.Command{ @@ -21,11 +21,12 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { if err := validateStackNames(opts.Namespaces); err != nil { return err } - return swarm.RunRemove(cmd.Context(), dockerCli, opts) + return swarm.RunRemove(cmd.Context(), dockerCLI, opts) }, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return completeNames(dockerCli)(cmd, args, toComplete) + return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/stack/services.go b/cli/command/stack/services.go index 13823ae645..b6f5428fad 100644 --- a/cli/command/stack/services.go +++ b/cli/command/stack/services.go @@ -41,6 +41,7 @@ func newServicesCommand(dockerCLI command.Cli) *cobra.Command { ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return completeNames(dockerCLI)(cmd, args, toComplete) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only display IDs") diff --git a/cli/command/swarm/ca.go b/cli/command/swarm/ca.go index 8cc9e7b612..524b488ef3 100644 --- a/cli/command/swarm/ca.go +++ b/cli/command/swarm/ca.go @@ -26,7 +26,7 @@ type caOptions struct { quiet bool } -func newCACommand(dockerCli command.Cli) *cobra.Command { +func newCACommand(dockerCLI command.Cli) *cobra.Command { opts := caOptions{} cmd := &cobra.Command{ @@ -34,13 +34,14 @@ func newCACommand(dockerCli command.Cli) *cobra.Command { Short: "Display and rotate the root CA", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runCA(cmd.Context(), dockerCli, cmd.Flags(), opts) + return runCA(cmd.Context(), dockerCLI, cmd.Flags(), opts) }, Annotations: map[string]string{ "version": "1.30", "swarm": "manager", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/cmd.go b/cli/command/swarm/cmd.go index bedd9ab613..72d873aadf 100644 --- a/cli/command/swarm/cmd.go +++ b/cli/command/swarm/cmd.go @@ -23,6 +23,7 @@ func newSwarmCommand(dockerCLI command.Cli) *cobra.Command { "version": "1.24", "swarm": "", // swarm command itself does not require swarm to be enabled (so swarm init and join is always available on API 1.24 and up) }, + DisableFlagsInUseLine: true, } cmd.AddCommand( newInitCommand(dockerCLI), diff --git a/cli/command/swarm/init.go b/cli/command/swarm/init.go index 0ef00d9454..9ac8ed1d40 100644 --- a/cli/command/swarm/init.go +++ b/cli/command/swarm/init.go @@ -27,7 +27,7 @@ type initOptions struct { DefaultAddrPoolMaskLength uint32 } -func newInitCommand(dockerCli command.Cli) *cobra.Command { +func newInitCommand(dockerCLI command.Cli) *cobra.Command { opts := initOptions{ listenAddr: NewListenAddrOption(), } @@ -37,13 +37,14 @@ func newInitCommand(dockerCli command.Cli) *cobra.Command { Short: "Initialize a swarm", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runInit(cmd.Context(), dockerCli, cmd.Flags(), opts) + return runInit(cmd.Context(), dockerCLI, cmd.Flags(), opts) }, Annotations: map[string]string{ "version": "1.24", "swarm": "", // swarm init does not require swarm to be active, and is always available on API 1.24 and up }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/join.go b/cli/command/swarm/join.go index ae83536090..bc0a472210 100644 --- a/cli/command/swarm/join.go +++ b/cli/command/swarm/join.go @@ -23,7 +23,7 @@ type joinOptions struct { availability string } -func newJoinCommand(dockerCli command.Cli) *cobra.Command { +func newJoinCommand(dockerCLI command.Cli) *cobra.Command { opts := joinOptions{ listenAddr: NewListenAddrOption(), } @@ -34,12 +34,13 @@ func newJoinCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.remote = args[0] - return runJoin(cmd.Context(), dockerCli, cmd.Flags(), opts) + return runJoin(cmd.Context(), dockerCLI, cmd.Flags(), opts) }, Annotations: map[string]string{ "version": "1.24", "swarm": "", // swarm join does not require swarm to be active, and is always available on API 1.24 and up }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/join_token.go b/cli/command/swarm/join_token.go index 51cee2aebc..f2ebee4b71 100644 --- a/cli/command/swarm/join_token.go +++ b/cli/command/swarm/join_token.go @@ -17,7 +17,7 @@ type joinTokenOptions struct { quiet bool } -func newJoinTokenCommand(dockerCli command.Cli) *cobra.Command { +func newJoinTokenCommand(dockerCLI command.Cli) *cobra.Command { opts := joinTokenOptions{} cmd := &cobra.Command{ @@ -26,12 +26,13 @@ func newJoinTokenCommand(dockerCli command.Cli) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.role = args[0] - return runJoinToken(cmd.Context(), dockerCli, opts) + return runJoinToken(cmd.Context(), dockerCLI, opts) }, Annotations: map[string]string{ "version": "1.24", "swarm": "manager", }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/leave.go b/cli/command/swarm/leave.go index 335dbb0042..eb59ad3256 100644 --- a/cli/command/swarm/leave.go +++ b/cli/command/swarm/leave.go @@ -13,7 +13,7 @@ type leaveOptions struct { force bool } -func newLeaveCommand(dockerCli command.Cli) *cobra.Command { +func newLeaveCommand(dockerCLI command.Cli) *cobra.Command { opts := leaveOptions{} cmd := &cobra.Command{ @@ -21,13 +21,14 @@ func newLeaveCommand(dockerCli command.Cli) *cobra.Command { Short: "Leave the swarm", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runLeave(cmd.Context(), dockerCli, opts) + return runLeave(cmd.Context(), dockerCLI, opts) }, Annotations: map[string]string{ "version": "1.24", "swarm": "active", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/testdata/update-noargs.golden b/cli/command/swarm/testdata/update-noargs.golden index a2ce75897c..c6b8bed8d4 100644 --- a/cli/command/swarm/testdata/update-noargs.golden +++ b/cli/command/swarm/testdata/update-noargs.golden @@ -1,7 +1,7 @@ Update the swarm Usage: - update [OPTIONS] [flags] + update [OPTIONS] Flags: --autolock Change manager autolocking setting (true|false) diff --git a/cli/command/swarm/unlock.go b/cli/command/swarm/unlock.go index 370384da97..ad416edfc0 100644 --- a/cli/command/swarm/unlock.go +++ b/cli/command/swarm/unlock.go @@ -16,19 +16,20 @@ import ( "golang.org/x/term" ) -func newUnlockCommand(dockerCli command.Cli) *cobra.Command { +func newUnlockCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "unlock", Short: "Unlock swarm", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runUnlock(cmd.Context(), dockerCli) + return runUnlock(cmd.Context(), dockerCLI) }, Annotations: map[string]string{ "version": "1.24", "swarm": "manager", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } return cmd diff --git a/cli/command/swarm/unlock_key.go b/cli/command/swarm/unlock_key.go index ea7505e0bd..d13d3c1ef3 100644 --- a/cli/command/swarm/unlock_key.go +++ b/cli/command/swarm/unlock_key.go @@ -17,7 +17,7 @@ type unlockKeyOptions struct { quiet bool } -func newUnlockKeyCommand(dockerCli command.Cli) *cobra.Command { +func newUnlockKeyCommand(dockerCLI command.Cli) *cobra.Command { opts := unlockKeyOptions{} cmd := &cobra.Command{ @@ -25,13 +25,14 @@ func newUnlockKeyCommand(dockerCli command.Cli) *cobra.Command { Short: "Manage the unlock key", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runUnlockKey(cmd.Context(), dockerCli, opts) + return runUnlockKey(cmd.Context(), dockerCLI, opts) }, Annotations: map[string]string{ "version": "1.24", "swarm": "manager", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/swarm/update.go b/cli/command/swarm/update.go index 2940227701..cc5414f1a7 100644 --- a/cli/command/swarm/update.go +++ b/cli/command/swarm/update.go @@ -12,7 +12,7 @@ import ( "github.com/spf13/pflag" ) -func newUpdateCommand(dockerCli command.Cli) *cobra.Command { +func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { opts := swarmOptions{} cmd := &cobra.Command{ @@ -20,7 +20,7 @@ func newUpdateCommand(dockerCli command.Cli) *cobra.Command { Short: "Update the swarm", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runUpdate(cmd.Context(), dockerCli, cmd.Flags(), opts) + return runUpdate(cmd.Context(), dockerCLI, cmd.Flags(), opts) }, PreRunE: func(cmd *cobra.Command, args []string) error { if cmd.Flags().NFlag() == 0 { @@ -32,7 +32,8 @@ func newUpdateCommand(dockerCli command.Cli) *cobra.Command { "version": "1.24", "swarm": "manager", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } cmd.Flags().BoolVar(&opts.autolock, flagAutolock, false, "Change manager autolocking setting (true|false)") diff --git a/cli/command/system/cmd.go b/cli/command/system/cmd.go index 13e4930726..793b997eb5 100644 --- a/cli/command/system/cmd.go +++ b/cli/command/system/cmd.go @@ -22,6 +22,8 @@ func newSystemCommand(dockerCLI command.Cli) *cobra.Command { Short: "Manage Docker", Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( newEventsCommand(dockerCLI), diff --git a/cli/command/system/df.go b/cli/command/system/df.go index 0e8b133cd1..7e9f1d17cc 100644 --- a/cli/command/system/df.go +++ b/cli/command/system/df.go @@ -17,7 +17,7 @@ type diskUsageOptions struct { } // newDiskUsageCommand creates a new cobra.Command for `docker df` -func newDiskUsageCommand(dockerCli command.Cli) *cobra.Command { +func newDiskUsageCommand(dockerCLI command.Cli) *cobra.Command { var opts diskUsageOptions cmd := &cobra.Command{ @@ -25,10 +25,11 @@ func newDiskUsageCommand(dockerCli command.Cli) *cobra.Command { Short: "Show docker disk usage", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runDiskUsage(cmd.Context(), dockerCli, opts) + return runDiskUsage(cmd.Context(), dockerCLI, opts) }, - Annotations: map[string]string{"version": "1.25"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.25"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/system/dial_stdio.go b/cli/command/system/dial_stdio.go index fc1cbee27a..13596acd62 100644 --- a/cli/command/system/dial_stdio.go +++ b/cli/command/system/dial_stdio.go @@ -13,16 +13,17 @@ import ( ) // newDialStdioCommand creates a new cobra.Command for `docker system dial-stdio` -func newDialStdioCommand(dockerCli command.Cli) *cobra.Command { +func newDialStdioCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "dial-stdio", Short: "Proxy the stdio stream to the daemon connection. Should not be invoked manually.", Args: cli.NoArgs, Hidden: true, RunE: func(cmd *cobra.Command, args []string) error { - return runDialStdio(cmd.Context(), dockerCli) + return runDialStdio(cmd.Context(), dockerCLI) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } return cmd } diff --git a/cli/command/system/events.go b/cli/command/system/events.go index 9b7b0cd3a8..6daf643356 100644 --- a/cli/command/system/events.go +++ b/cli/command/system/events.go @@ -41,7 +41,8 @@ func newEventsCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker system events, docker events", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/system/info.go b/cli/command/system/info.go index 6b04c5bf94..9adf55319a 100644 --- a/cli/command/system/info.go +++ b/cli/command/system/info.go @@ -73,7 +73,8 @@ func newInfoCommand(dockerCLI command.Cli) *cobra.Command { "category-top": "12", "aliases": "docker system info, docker info", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/system/inspect.go b/cli/command/system/inspect.go index 4a54f78a1a..f248314bc8 100644 --- a/cli/command/system/inspect.go +++ b/cli/command/system/inspect.go @@ -73,7 +73,8 @@ func newInspectCommand(dockerCLI command.Cli) *cobra.Command { return runInspect(cmd.Context(), dockerCLI, opts) }, // TODO(thaJeztah): should we consider adding completion for common object-types? (images, containers?) - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/system/prune.go b/cli/command/system/prune.go index 30451e0a1d..3746939587 100644 --- a/cli/command/system/prune.go +++ b/cli/command/system/prune.go @@ -27,7 +27,7 @@ type pruneOptions struct { } // newPruneCommand creates a new cobra.Command for `docker prune` -func newPruneCommand(dockerCli command.Cli) *cobra.Command { +func newPruneCommand(dockerCLI command.Cli) *cobra.Command { options := pruneOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -35,10 +35,11 @@ func newPruneCommand(dockerCli command.Cli) *cobra.Command { Short: "Remove unused data", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runPrune(cmd.Context(), dockerCli, options) + return runPrune(cmd.Context(), dockerCLI, options) }, - Annotations: map[string]string{"version": "1.25"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.25"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/system/version.go b/cli/command/system/version.go index b883f358dc..050228c658 100644 --- a/cli/command/system/version.go +++ b/cli/command/system/version.go @@ -122,7 +122,8 @@ func newVersionCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "category-top": "10", }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/trust/cmd.go b/cli/command/trust/cmd.go index 850429d84e..55c80fe68a 100644 --- a/cli/command/trust/cmd.go +++ b/cli/command/trust/cmd.go @@ -18,6 +18,8 @@ func newTrustCommand(dockerCLI command.Cli) *cobra.Command { Short: "Manage trust on Docker images", Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( newRevokeCommand(dockerCLI), diff --git a/cli/command/trust/inspect.go b/cli/command/trust/inspect.go index 18705f519c..6e10e7462a 100644 --- a/cli/command/trust/inspect.go +++ b/cli/command/trust/inspect.go @@ -23,7 +23,7 @@ type inspectOptions struct { prettyPrint bool } -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { options := inspectOptions{} cmd := &cobra.Command{ Use: "inspect IMAGE[:TAG] [IMAGE[:TAG]...]", @@ -32,8 +32,9 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { options.remotes = args - return runInspect(cmd.Context(), dockerCli, options) + return runInspect(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/trust/key.go b/cli/command/trust/key.go index f57b44c771..bc1ede4168 100644 --- a/cli/command/trust/key.go +++ b/cli/command/trust/key.go @@ -7,16 +7,18 @@ import ( ) // newTrustKeyCommand returns a cobra command for `trust key` subcommands -func newTrustKeyCommand(dockerCli command.Streams) *cobra.Command { +func newTrustKeyCommand(dockerCLI command.Streams) *cobra.Command { cmd := &cobra.Command{ Use: "key", Short: "Manage keys for signing Docker images", Args: cli.NoArgs, - RunE: command.ShowHelp(dockerCli.Err()), + RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( - newKeyGenerateCommand(dockerCli), - newKeyLoadCommand(dockerCli), + newKeyGenerateCommand(dockerCLI), + newKeyLoadCommand(dockerCLI), ) return cmd } diff --git a/cli/command/trust/key_generate.go b/cli/command/trust/key_generate.go index a966840c10..553a7e7b2c 100644 --- a/cli/command/trust/key_generate.go +++ b/cli/command/trust/key_generate.go @@ -23,7 +23,7 @@ type keyGenerateOptions struct { directory string } -func newKeyGenerateCommand(dockerCli command.Streams) *cobra.Command { +func newKeyGenerateCommand(dockerCLI command.Streams) *cobra.Command { options := keyGenerateOptions{} cmd := &cobra.Command{ Use: "generate NAME", @@ -31,8 +31,9 @@ func newKeyGenerateCommand(dockerCli command.Streams) *cobra.Command { Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { options.name = args[0] - return setupPassphraseAndGenerateKeys(dockerCli, options) + return setupPassphraseAndGenerateKeys(dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVar(&options.directory, "dir", "", "Directory to generate key in, defaults to current directory") diff --git a/cli/command/trust/key_load.go b/cli/command/trust/key_load.go index 5880cfa825..382f82ceb0 100644 --- a/cli/command/trust/key_load.go +++ b/cli/command/trust/key_load.go @@ -27,15 +27,16 @@ type keyLoadOptions struct { keyName string } -func newKeyLoadCommand(dockerCli command.Streams) *cobra.Command { +func newKeyLoadCommand(dockerCLI command.Streams) *cobra.Command { var options keyLoadOptions cmd := &cobra.Command{ Use: "load [OPTIONS] KEYFILE", Short: "Load a private key file for signing", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return loadPrivKey(dockerCli, args[0], options) + return loadPrivKey(dockerCLI, args[0], options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVar(&options.keyName, "name", "signer", "Name for the loaded key") diff --git a/cli/command/trust/revoke.go b/cli/command/trust/revoke.go index e9e327ec0b..1db6acca52 100644 --- a/cli/command/trust/revoke.go +++ b/cli/command/trust/revoke.go @@ -27,6 +27,7 @@ func newRevokeCommand(dockerCLI command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return revokeTrust(cmd.Context(), dockerCLI, args[0], options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&options.forceYes, "yes", "y", false, "Do not prompt for confirmation") diff --git a/cli/command/trust/sign.go b/cli/command/trust/sign.go index 36b65a1926..0af3f7f0f2 100644 --- a/cli/command/trust/sign.go +++ b/cli/command/trust/sign.go @@ -35,6 +35,7 @@ func newSignCommand(dockerCLI command.Cli) *cobra.Command { options.imageName = args[0] return runSignImage(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVar(&options.local, "local", false, "Sign a locally tagged image") diff --git a/cli/command/trust/signer.go b/cli/command/trust/signer.go index 807ad6c955..c765abeb13 100644 --- a/cli/command/trust/signer.go +++ b/cli/command/trust/signer.go @@ -7,16 +7,18 @@ import ( ) // newTrustSignerCommand returns a cobra command for `trust signer` subcommands -func newTrustSignerCommand(dockerCli command.Cli) *cobra.Command { +func newTrustSignerCommand(dockerCLI command.Cli) *cobra.Command { cmd := &cobra.Command{ Use: "signer", Short: "Manage entities who can sign Docker images", Args: cli.NoArgs, - RunE: command.ShowHelp(dockerCli.Err()), + RunE: command.ShowHelp(dockerCLI.Err()), + + DisableFlagsInUseLine: true, } cmd.AddCommand( - newSignerAddCommand(dockerCli), - newSignerRemoveCommand(dockerCli), + newSignerAddCommand(dockerCLI), + newSignerRemoveCommand(dockerCLI), ) return cmd } diff --git a/cli/command/trust/signer_add.go b/cli/command/trust/signer_add.go index 7d708bc60e..853250a631 100644 --- a/cli/command/trust/signer_add.go +++ b/cli/command/trust/signer_add.go @@ -37,6 +37,7 @@ func newSignerAddCommand(dockerCLI command.Cli) *cobra.Command { options.repos = args[1:] return addSigner(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() options.keys = opts.NewListOpts(nil) diff --git a/cli/command/trust/signer_remove.go b/cli/command/trust/signer_remove.go index 9f0c6736aa..27f180a9a0 100644 --- a/cli/command/trust/signer_remove.go +++ b/cli/command/trust/signer_remove.go @@ -21,7 +21,7 @@ type signerRemoveOptions struct { forceYes bool } -func newSignerRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newSignerRemoveCommand(dockerCLI command.Cli) *cobra.Command { options := signerRemoveOptions{} cmd := &cobra.Command{ Use: "remove [OPTIONS] NAME REPOSITORY [REPOSITORY...]", @@ -30,8 +30,9 @@ func newSignerRemoveCommand(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { options.signer = args[0] options.repos = args[1:] - return removeSigner(cmd.Context(), dockerCli, options) + return removeSigner(cmd.Context(), dockerCLI, options) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.BoolVarP(&options.forceYes, "force", "f", false, "Do not prompt for confirmation before removing the most recent signer") diff --git a/cli/command/volume/cmd.go b/cli/command/volume/cmd.go index f63afa66fb..61477d1687 100644 --- a/cli/command/volume/cmd.go +++ b/cli/command/volume/cmd.go @@ -19,6 +19,8 @@ func newVolumeCommand(dockerCLI command.Cli) *cobra.Command { Args: cli.NoArgs, RunE: command.ShowHelp(dockerCLI.Err()), Annotations: map[string]string{"version": "1.21"}, + + DisableFlagsInUseLine: true, } cmd.AddCommand( newCreateCommand(dockerCLI), diff --git a/cli/command/volume/create.go b/cli/command/volume/create.go index a1ca9b3392..c87dc237f5 100644 --- a/cli/command/volume/create.go +++ b/cli/command/volume/create.go @@ -35,7 +35,7 @@ type createOptions struct { preferredTopology opts.ListOpts } -func newCreateCommand(dockerCli command.Cli) *cobra.Command { +func newCreateCommand(dockerCLI command.Cli) *cobra.Command { options := createOptions{ driverOpts: *opts.NewMapOpts(nil, nil), labels: opts.NewListOpts(opts.ValidateLabel), @@ -56,9 +56,10 @@ func newCreateCommand(dockerCli command.Cli) *cobra.Command { options.name = args[0] } options.cluster = hasClusterVolumeOptionSet(cmd.Flags()) - return runCreate(cmd.Context(), dockerCli, options) + return runCreate(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() flags.StringVarP(&options.driver, "driver", "d", "local", "Specify volume driver name") diff --git a/cli/command/volume/inspect.go b/cli/command/volume/inspect.go index cc3abb72e8..375ae5a7d3 100644 --- a/cli/command/volume/inspect.go +++ b/cli/command/volume/inspect.go @@ -19,7 +19,7 @@ type inspectOptions struct { names []string } -func newInspectCommand(dockerCli command.Cli) *cobra.Command { +func newInspectCommand(dockerCLI command.Cli) *cobra.Command { var opts inspectOptions cmd := &cobra.Command{ @@ -28,9 +28,10 @@ func newInspectCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.names = args - return runInspect(cmd.Context(), dockerCli, opts) + return runInspect(cmd.Context(), dockerCLI, opts) }, - ValidArgsFunction: completion.VolumeNames(dockerCli), + ValidArgsFunction: completion.VolumeNames(dockerCLI), + DisableFlagsInUseLine: true, } cmd.Flags().StringVarP(&opts.format, "format", "f", "", flagsHelper.InspectFormatHelp) diff --git a/cli/command/volume/list.go b/cli/command/volume/list.go index d8ff3ac820..1730b45d7d 100644 --- a/cli/command/volume/list.go +++ b/cli/command/volume/list.go @@ -25,7 +25,7 @@ type listOptions struct { filter opts.FilterOpt } -func newListCommand(dockerCli command.Cli) *cobra.Command { +func newListCommand(dockerCLI command.Cli) *cobra.Command { options := listOptions{filter: opts.NewFilterOpt()} cmd := &cobra.Command{ @@ -34,9 +34,10 @@ func newListCommand(dockerCli command.Cli) *cobra.Command { Short: "List volumes", Args: cli.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(cmd.Context(), dockerCli, options) + return runList(cmd.Context(), dockerCLI, options) }, - ValidArgsFunction: cobra.NoFileCompletions, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/volume/prune.go b/cli/command/volume/prune.go index d3d1c6b1c7..9d17a7868e 100644 --- a/cli/command/volume/prune.go +++ b/cli/command/volume/prune.go @@ -47,8 +47,9 @@ func newPruneCommand(dockerCLI command.Cli) *cobra.Command { fmt.Fprintln(dockerCLI.Out(), "Total reclaimed space:", units.HumanSize(float64(spaceReclaimed))) return nil }, - Annotations: map[string]string{"version": "1.25"}, - ValidArgsFunction: cobra.NoFileCompletions, + Annotations: map[string]string{"version": "1.25"}, + ValidArgsFunction: cobra.NoFileCompletions, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/volume/remove.go b/cli/command/volume/remove.go index eab894b02b..e22c0d203b 100644 --- a/cli/command/volume/remove.go +++ b/cli/command/volume/remove.go @@ -17,7 +17,7 @@ type removeOptions struct { volumes []string } -func newRemoveCommand(dockerCli command.Cli) *cobra.Command { +func newRemoveCommand(dockerCLI command.Cli) *cobra.Command { var opts removeOptions cmd := &cobra.Command{ @@ -28,9 +28,10 @@ func newRemoveCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.volumes = args - return runRemove(cmd.Context(), dockerCli, &opts) + return runRemove(cmd.Context(), dockerCLI, &opts) }, - ValidArgsFunction: completion.VolumeNames(dockerCli), + ValidArgsFunction: completion.VolumeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cli/command/volume/update.go b/cli/command/volume/update.go index 8edfc4a686..a7ebf55648 100644 --- a/cli/command/volume/update.go +++ b/cli/command/volume/update.go @@ -12,7 +12,7 @@ import ( "github.com/spf13/pflag" ) -func newUpdateCommand(dockerCli command.Cli) *cobra.Command { +func newUpdateCommand(dockerCLI command.Cli) *cobra.Command { var availability string cmd := &cobra.Command{ @@ -20,13 +20,14 @@ func newUpdateCommand(dockerCli command.Cli) *cobra.Command { Short: "Update a volume (cluster volumes only)", Args: cli.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - return runUpdate(cmd.Context(), dockerCli, args[0], availability, cmd.Flags()) + return runUpdate(cmd.Context(), dockerCLI, args[0], availability, cmd.Flags()) }, Annotations: map[string]string{ "version": "1.42", "swarm": "manager", }, - ValidArgsFunction: completion.VolumeNames(dockerCli), + ValidArgsFunction: completion.VolumeNames(dockerCLI), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/cmd/docker/docker.go b/cmd/docker/docker.go index fccd0756ea..be326cb887 100644 --- a/cmd/docker/docker.go +++ b/cmd/docker/docker.go @@ -163,11 +163,7 @@ func newDockerCommand(dockerCli *command.DockerCli) *cli.TopLevelCommand { cmd.SetOut(dockerCli.Out()) commands.AddCommands(cmd, dockerCli) - visitAll(cmd, - setValidateArgs(dockerCli), - // prevent adding "[flags]" to the end of the usage line. - func(c *cobra.Command) { c.DisableFlagsInUseLine = true }, - ) + visitAll(cmd, setValidateArgs(dockerCli)) // flags must be the top-level command flags, not cmd.Flags() return cli.NewTopLevelCommand(cmd, dockerCli, opts, cmd.Flags()) diff --git a/cmd/docker/docker_test.go b/cmd/docker/docker_test.go index 99e9583cfb..a4529cbb9d 100644 --- a/cmd/docker/docker_test.go +++ b/cmd/docker/docker_test.go @@ -11,6 +11,7 @@ import ( "time" "github.com/docker/cli/cli/command" + "github.com/docker/cli/cli/command/commands" "github.com/docker/cli/cli/debug" platformsignals "github.com/docker/cli/cmd/docker/internal/signals" "github.com/sirupsen/logrus" @@ -19,6 +20,22 @@ import ( is "gotest.tools/v3/assert/cmp" ) +func TestDisableFlagsInUseLineIsSet(t *testing.T) { + dockerCli, err := command.NewDockerCli(command.WithBaseContext(context.TODO())) + assert.NilError(t, err) + rootCmd := &cobra.Command{DisableFlagsInUseLine: true} + commands.AddCommands(rootCmd, dockerCli) + + var errs []error + visitAll(rootCmd, func(c *cobra.Command) { + if !c.DisableFlagsInUseLine { + errs = append(errs, errors.New("DisableFlagsInUseLine is not set for "+c.CommandPath())) + } + }) + err = errors.Join(errs...) + assert.NilError(t, err) +} + func TestClientDebugEnabled(t *testing.T) { defer debug.Disable() ctx, cancel := context.WithCancel(context.TODO())