diff --git a/commands/bake.go b/commands/bake.go index 39a26092..8815b639 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -492,7 +492,8 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { // Other common flags (noCache, pull and progress) are processed in runBake function. return runBake(cmd.Context(), dockerCli, args, options, cFlags, filesFromEnv) }, - ValidArgsFunction: completion.BakeTargets(options.files), + ValidArgsFunction: completion.BakeTargets(options.files), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/build.go b/commands/build.go index ea022076..16a395b8 100644 --- a/commands/build.go +++ b/commands/build.go @@ -490,6 +490,7 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions, debugger debuggerOpt ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return nil, cobra.ShellCompDirectiveFilterDirs }, + DisableFlagsInUseLine: true, } var platformsDefault []string diff --git a/commands/create.go b/commands/create.go index 5cc90e72..d49fda4e 100644 --- a/commands/create.go +++ b/commands/create.go @@ -98,7 +98,8 @@ func createCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runCreate(cmd.Context(), dockerCli, options, args) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/dap.go b/commands/dap.go index f8b9e195..09111e02 100644 --- a/commands/dap.go +++ b/commands/dap.go @@ -23,6 +23,8 @@ func dapCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { cmd := &cobra.Command{ Use: "dap", Short: "Start debug adapter protocol compatible debugger", + + DisableFlagsInUseLine: true, } cobrautil.MarkCommandExperimental(cmd) @@ -116,6 +118,7 @@ func dapAttachCmd() *cobra.Command { } return nil }, + DisableFlagsInUseLine: true, } return cmd } diff --git a/commands/debug.go b/commands/debug.go index 0a39cbe0..926ea800 100644 --- a/commands/debug.go +++ b/commands/debug.go @@ -44,6 +44,8 @@ func debugCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { cmd := &cobra.Command{ Use: "debug", Short: "Start debugger", + + DisableFlagsInUseLine: true, } cobrautil.MarkCommandExperimental(cmd) diff --git a/commands/dial_stdio.go b/commands/dial_stdio.go index 92024955..0aa265bc 100644 --- a/commands/dial_stdio.go +++ b/commands/dial_stdio.go @@ -122,6 +122,7 @@ func dialStdioCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { opts.builder = rootOpts.builder return runDialStdio(dockerCli, opts) }, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/diskusage.go b/commands/diskusage.go index 62c62178..1d3d506d 100644 --- a/commands/diskusage.go +++ b/commands/diskusage.go @@ -189,7 +189,8 @@ func duCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { options.builder = rootOpts.builder return runDiskUsage(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/export.go b/commands/history/export.go index ee56d92c..e313fdf6 100644 --- a/commands/history/export.go +++ b/commands/history/export.go @@ -160,7 +160,8 @@ func exportCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runExport(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/import.go b/commands/history/import.go index ff43d6d8..ff8700be 100644 --- a/commands/history/import.go +++ b/commands/history/import.go @@ -125,7 +125,8 @@ func importCmd(dockerCli command.Cli, _ RootOptions) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runImport(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/inspect.go b/commands/history/inspect.go index f42633da..e398d7aa 100644 --- a/commands/history/inspect.go +++ b/commands/history/inspect.go @@ -656,7 +656,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runInspect(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } cmd.AddCommand( diff --git a/commands/history/inspect_attachment.go b/commands/history/inspect_attachment.go index 7f7e916e..9de06693 100644 --- a/commands/history/inspect_attachment.go +++ b/commands/history/inspect_attachment.go @@ -129,7 +129,8 @@ func attachmentCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runAttachment(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/logs.go b/commands/history/logs.go index c1b368f1..5604a9fa 100644 --- a/commands/history/logs.go +++ b/commands/history/logs.go @@ -96,7 +96,8 @@ func logsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runLogs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/ls.go b/commands/history/ls.go index 2a5195aa..7dc2c6ee 100644 --- a/commands/history/ls.go +++ b/commands/history/ls.go @@ -103,7 +103,8 @@ func lsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runLs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/open.go b/commands/history/open.go index 694bec35..5e3f9dd3 100644 --- a/commands/history/open.go +++ b/commands/history/open.go @@ -55,7 +55,8 @@ func openCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runOpen(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } return cmd diff --git a/commands/history/rm.go b/commands/history/rm.go index 8d04c9d0..3e932d23 100644 --- a/commands/history/rm.go +++ b/commands/history/rm.go @@ -129,7 +129,8 @@ func rmCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runRm(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/history/root.go b/commands/history/root.go index 97623188..d04f0713 100644 --- a/commands/history/root.go +++ b/commands/history/root.go @@ -16,6 +16,8 @@ func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *c Short: "Commands to work on build records", ValidArgsFunction: completion.Disable, RunE: rootcmd.RunE, + + DisableFlagsInUseLine: true, } cmd.AddCommand( diff --git a/commands/history/trace.go b/commands/history/trace.go index 9e60765f..095c0c2a 100644 --- a/commands/history/trace.go +++ b/commands/history/trace.go @@ -199,7 +199,8 @@ func traceCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runTrace(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/imagetools/create.go b/commands/imagetools/create.go index fc2ad066..8a90e8ba 100644 --- a/commands/imagetools/create.go +++ b/commands/imagetools/create.go @@ -279,7 +279,8 @@ func createCmd(dockerCli command.Cli, opts RootOptions) *cobra.Command { options.builder = *opts.Builder return runCreate(cmd.Context(), dockerCli, options, args) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/imagetools/inspect.go b/commands/imagetools/inspect.go index 5b06f52f..9745e218 100644 --- a/commands/imagetools/inspect.go +++ b/commands/imagetools/inspect.go @@ -52,7 +52,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runInspect(cmd.Context(), dockerCli, options, args[0]) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/imagetools/root.go b/commands/imagetools/root.go index 03acc799..03116777 100644 --- a/commands/imagetools/root.go +++ b/commands/imagetools/root.go @@ -12,10 +12,11 @@ type RootOptions struct { func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *cobra.Command { cmd := &cobra.Command{ - Use: "imagetools", - Short: "Commands to work on images in registry", - ValidArgsFunction: completion.Disable, - RunE: rootcmd.RunE, + Use: "imagetools", + Short: "Commands to work on images in registry", + ValidArgsFunction: completion.Disable, + RunE: rootcmd.RunE, + DisableFlagsInUseLine: true, } cmd.AddCommand( diff --git a/commands/inspect.go b/commands/inspect.go index 06c0da4e..0e242411 100644 --- a/commands/inspect.go +++ b/commands/inspect.go @@ -182,7 +182,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runInspect(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: completion.BuilderNames(dockerCli), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/install.go b/commands/install.go index 0014a52a..fbfe5438 100644 --- a/commands/install.go +++ b/commands/install.go @@ -47,8 +47,9 @@ func installCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runInstall(dockerCli, options) }, - Hidden: true, - ValidArgsFunction: completion.Disable, + Hidden: true, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } // hide builder persistent flag for this command diff --git a/commands/ls.go b/commands/ls.go index cf57d4c6..847c4130 100644 --- a/commands/ls.go +++ b/commands/ls.go @@ -107,7 +107,8 @@ func lsCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runLs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/prune.go b/commands/prune.go index 24574f92..12d2ba67 100644 --- a/commands/prune.go +++ b/commands/prune.go @@ -170,7 +170,8 @@ func pruneCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { options.builder = rootOpts.builder return runPrune(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/rm.go b/commands/rm.go index 712ed456..6f9cb000 100644 --- a/commands/rm.go +++ b/commands/rm.go @@ -111,7 +111,8 @@ func rmCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runRm(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: completion.BuilderNames(dockerCli), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/root.go b/commands/root.go index 10263d11..7d6b1718 100644 --- a/commands/root.go +++ b/commands/root.go @@ -71,6 +71,7 @@ func NewRootCmd(name string, isPlugin bool, dockerCli *command.DockerCli) *cobra Status: fmt.Sprintf("ERROR: unknown command: %q", args[0]), } }, + DisableFlagsInUseLine: true, } if !isPlugin { // match plugin behavior for standalone mode @@ -78,8 +79,6 @@ func NewRootCmd(name string, isPlugin bool, dockerCli *command.DockerCli) *cobra cmd.SilenceUsage = true cmd.SilenceErrors = true cmd.TraverseChildren = true - cmd.DisableFlagsInUseLine = true - cli.DisableFlagsInUseLine(cmd) if !confutil.IsExperimental() { cmd.SetHelpTemplate(cmd.HelpTemplate() + "\n" + experimentalCommandHint + "\n") } diff --git a/commands/root_test.go b/commands/root_test.go new file mode 100644 index 00000000..edaf0d54 --- /dev/null +++ b/commands/root_test.go @@ -0,0 +1,33 @@ +package commands + +import ( + stderrs "errors" + "testing" + + "github.com/docker/cli/cli/command" + "github.com/pkg/errors" + "github.com/spf13/cobra" + "github.com/stretchr/testify/require" +) + +func TestDisableFlagsInUseLineIsSet(t *testing.T) { + cmd, err := command.NewDockerCli() + require.NoError(t, err) + rootCmd := NewRootCmd("buildx", true, cmd) + + 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 = stderrs.Join(errs...) + require.NoError(t, err) +} + +func visitAll(root *cobra.Command, fn func(*cobra.Command)) { + for _, cmd := range root.Commands() { + visitAll(cmd, fn) + } + fn(root) +} diff --git a/commands/stop.go b/commands/stop.go index b27985af..89c48f2c 100644 --- a/commands/stop.go +++ b/commands/stop.go @@ -44,7 +44,8 @@ func stopCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runStop(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: completion.BuilderNames(dockerCli), + DisableFlagsInUseLine: true, } return cmd diff --git a/commands/uninstall.go b/commands/uninstall.go index 373a822e..b401dc72 100644 --- a/commands/uninstall.go +++ b/commands/uninstall.go @@ -53,8 +53,9 @@ func uninstallCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runUninstall(dockerCli, options) }, - Hidden: true, - ValidArgsFunction: completion.Disable, + Hidden: true, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } // hide builder persistent flag for this command diff --git a/commands/use.go b/commands/use.go index 58442281..2a4a5368 100644 --- a/commands/use.go +++ b/commands/use.go @@ -71,7 +71,8 @@ func useCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runUse(dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: completion.BuilderNames(dockerCli), + DisableFlagsInUseLine: true, } flags := cmd.Flags() diff --git a/commands/version.go b/commands/version.go index f98b19dc..fe6efd8a 100644 --- a/commands/version.go +++ b/commands/version.go @@ -24,7 +24,8 @@ func versionCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runVersion(dockerCli) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: completion.Disable, + DisableFlagsInUseLine: true, } // hide builder persistent flag for this command