commands: verify that DisableFlagsInUseLine is set for all commands
This replaces the DisableFlagsInUseLine call from the CLI with a test that verifies the option is set for all commands and subcommands, so that it doesn't have to be modified at runtime. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
+2
-1
@@ -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.
|
// Other common flags (noCache, pull and progress) are processed in runBake function.
|
||||||
return runBake(cmd.Context(), dockerCli, args, options, cFlags, filesFromEnv)
|
return runBake(cmd.Context(), dockerCli, args, options, cFlags, filesFromEnv)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.BakeTargets(options.files),
|
ValidArgsFunction: completion.BakeTargets(options.files),
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -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) {
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
return nil, cobra.ShellCompDirectiveFilterDirs
|
return nil, cobra.ShellCompDirectiveFilterDirs
|
||||||
},
|
},
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
var platformsDefault []string
|
var platformsDefault []string
|
||||||
|
|||||||
+2
-1
@@ -98,7 +98,8 @@ func createCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runCreate(cmd.Context(), dockerCli, options, args)
|
return runCreate(cmd.Context(), dockerCli, options, args)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ func dapCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "dap",
|
Use: "dap",
|
||||||
Short: "Start debug adapter protocol compatible debugger",
|
Short: "Start debug adapter protocol compatible debugger",
|
||||||
|
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
cobrautil.MarkCommandExperimental(cmd)
|
cobrautil.MarkCommandExperimental(cmd)
|
||||||
|
|
||||||
@@ -116,6 +118,7 @@ func dapAttachCmd() *cobra.Command {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ func debugCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "debug",
|
Use: "debug",
|
||||||
Short: "Start debugger",
|
Short: "Start debugger",
|
||||||
|
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
cobrautil.MarkCommandExperimental(cmd)
|
cobrautil.MarkCommandExperimental(cmd)
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ func dialStdioCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
opts.builder = rootOpts.builder
|
opts.builder = rootOpts.builder
|
||||||
return runDialStdio(dockerCli, opts)
|
return runDialStdio(dockerCli, opts)
|
||||||
},
|
},
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -189,7 +189,8 @@ func duCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
options.builder = rootOpts.builder
|
options.builder = rootOpts.builder
|
||||||
return runDiskUsage(cmd.Context(), dockerCli, options)
|
return runDiskUsage(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -160,7 +160,8 @@ func exportCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runExport(cmd.Context(), dockerCli, options)
|
return runExport(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -125,7 +125,8 @@ func importCmd(dockerCli command.Cli, _ RootOptions) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runImport(cmd.Context(), dockerCli, options)
|
return runImport(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -656,7 +656,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runInspect(cmd.Context(), dockerCli, options)
|
return runInspect(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ func attachmentCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runAttachment(cmd.Context(), dockerCli, options)
|
return runAttachment(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -96,7 +96,8 @@ func logsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runLogs(cmd.Context(), dockerCli, options)
|
return runLogs(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ func lsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runLs(cmd.Context(), dockerCli, options)
|
return runLs(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ func openCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runOpen(cmd.Context(), dockerCli, options)
|
return runOpen(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ func rmCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runRm(cmd.Context(), dockerCli, options)
|
return runRm(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *c
|
|||||||
Short: "Commands to work on build records",
|
Short: "Commands to work on build records",
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
RunE: rootcmd.RunE,
|
RunE: rootcmd.RunE,
|
||||||
|
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
||||||
|
|||||||
@@ -199,7 +199,8 @@ func traceCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runTrace(cmd.Context(), dockerCli, options)
|
return runTrace(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -279,7 +279,8 @@ func createCmd(dockerCli command.Cli, opts RootOptions) *cobra.Command {
|
|||||||
options.builder = *opts.Builder
|
options.builder = *opts.Builder
|
||||||
return runCreate(cmd.Context(), dockerCli, options, args)
|
return runCreate(cmd.Context(), dockerCli, options, args)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command {
|
|||||||
options.builder = *rootOpts.Builder
|
options.builder = *rootOpts.Builder
|
||||||
return runInspect(cmd.Context(), dockerCli, options, args[0])
|
return runInspect(cmd.Context(), dockerCli, options, args[0])
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
@@ -12,10 +12,11 @@ type RootOptions struct {
|
|||||||
|
|
||||||
func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *cobra.Command {
|
func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "imagetools",
|
Use: "imagetools",
|
||||||
Short: "Commands to work on images in registry",
|
Short: "Commands to work on images in registry",
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
RunE: rootcmd.RunE,
|
RunE: rootcmd.RunE,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
||||||
|
|||||||
+2
-1
@@ -182,7 +182,8 @@ func inspectCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
}
|
}
|
||||||
return runInspect(cmd.Context(), dockerCli, options)
|
return runInspect(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
+3
-2
@@ -47,8 +47,9 @@ func installCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runInstall(dockerCli, options)
|
return runInstall(dockerCli, options)
|
||||||
},
|
},
|
||||||
Hidden: true,
|
Hidden: true,
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// hide builder persistent flag for this command
|
// hide builder persistent flag for this command
|
||||||
|
|||||||
+2
-1
@@ -107,7 +107,8 @@ func lsCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runLs(cmd.Context(), dockerCli, options)
|
return runLs(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
+2
-1
@@ -170,7 +170,8 @@ func pruneCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
options.builder = rootOpts.builder
|
options.builder = rootOpts.builder
|
||||||
return runPrune(cmd.Context(), dockerCli, options)
|
return runPrune(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
+2
-1
@@ -111,7 +111,8 @@ func rmCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
}
|
}
|
||||||
return runRm(cmd.Context(), dockerCli, options)
|
return runRm(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
+1
-2
@@ -71,6 +71,7 @@ func NewRootCmd(name string, isPlugin bool, dockerCli *command.DockerCli) *cobra
|
|||||||
Status: fmt.Sprintf("ERROR: unknown command: %q", args[0]),
|
Status: fmt.Sprintf("ERROR: unknown command: %q", args[0]),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
if !isPlugin {
|
if !isPlugin {
|
||||||
// match plugin behavior for standalone mode
|
// match plugin behavior for standalone mode
|
||||||
@@ -78,8 +79,6 @@ func NewRootCmd(name string, isPlugin bool, dockerCli *command.DockerCli) *cobra
|
|||||||
cmd.SilenceUsage = true
|
cmd.SilenceUsage = true
|
||||||
cmd.SilenceErrors = true
|
cmd.SilenceErrors = true
|
||||||
cmd.TraverseChildren = true
|
cmd.TraverseChildren = true
|
||||||
cmd.DisableFlagsInUseLine = true
|
|
||||||
cli.DisableFlagsInUseLine(cmd)
|
|
||||||
if !confutil.IsExperimental() {
|
if !confutil.IsExperimental() {
|
||||||
cmd.SetHelpTemplate(cmd.HelpTemplate() + "\n" + experimentalCommandHint + "\n")
|
cmd.SetHelpTemplate(cmd.HelpTemplate() + "\n" + experimentalCommandHint + "\n")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
+2
-1
@@ -44,7 +44,8 @@ func stopCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
}
|
}
|
||||||
return runStop(cmd.Context(), dockerCli, options)
|
return runStop(cmd.Context(), dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|||||||
@@ -53,8 +53,9 @@ func uninstallCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runUninstall(dockerCli, options)
|
return runUninstall(dockerCli, options)
|
||||||
},
|
},
|
||||||
Hidden: true,
|
Hidden: true,
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// hide builder persistent flag for this command
|
// hide builder persistent flag for this command
|
||||||
|
|||||||
+2
-1
@@ -71,7 +71,8 @@ func useCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
}
|
}
|
||||||
return runUse(dockerCli, options)
|
return runUse(dockerCli, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
ValidArgsFunction: completion.BuilderNames(dockerCli),
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
|
|||||||
+2
-1
@@ -24,7 +24,8 @@ func versionCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runVersion(dockerCli)
|
return runVersion(dockerCli)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.Disable,
|
ValidArgsFunction: completion.Disable,
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// hide builder persistent flag for this command
|
// hide builder persistent flag for this command
|
||||||
|
|||||||
Reference in New Issue
Block a user