From eb522dac241ce3b12af9293e7bfbfd10d65f2346 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Wed, 2 Nov 2016 17:43:32 -0700 Subject: [PATCH 1/2] always add but hide experimental cmds and flags Signed-off-by: Victor Vieux --- command/cli.go | 2 +- command/commands/commands.go | 13 ++++--------- command/container/start.go | 9 ++++----- command/image/build.go | 5 ++--- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/command/cli.go b/command/cli.go index be82ecf6f3..9b61492442 100644 --- a/command/cli.go +++ b/command/cli.go @@ -45,7 +45,7 @@ type DockerCli struct { func (cli *DockerCli) HasExperimental() bool { if cli.hasExperimental == nil { if cli.client == nil { - cli.Initialize(cliflags.NewClientOptions()) + return false } enabled := false cli.hasExperimental = &enabled diff --git a/command/commands/commands.go b/command/commands/commands.go index 425f90ba7d..fad709bca1 100644 --- a/command/commands/commands.go +++ b/command/commands/commands.go @@ -70,17 +70,12 @@ func AddCommands(cmd *cobra.Command, dockerCli *command.DockerCli) { hide(image.NewSaveCommand(dockerCli)), hide(image.NewTagCommand(dockerCli)), hide(system.NewInspectCommand(dockerCli)), + stack.NewStackCommand(dockerCli), + stack.NewTopLevelDeployCommand(dockerCli), + checkpoint.NewCheckpointCommand(dockerCli), + plugin.NewPluginCommand(dockerCli), ) - if dockerCli.HasExperimental() { - cmd.AddCommand( - stack.NewStackCommand(dockerCli), - stack.NewTopLevelDeployCommand(dockerCli), - checkpoint.NewCheckpointCommand(dockerCli), - plugin.NewPluginCommand(dockerCli), - ) - } - } func hide(cmd *cobra.Command) *cobra.Command { diff --git a/command/container/start.go b/command/container/start.go index 8e0654da37..e544028932 100644 --- a/command/container/start.go +++ b/command/container/start.go @@ -45,11 +45,10 @@ func NewStartCommand(dockerCli *command.DockerCli) *cobra.Command { flags.BoolVarP(&opts.openStdin, "interactive", "i", false, "Attach container's STDIN") flags.StringVar(&opts.detachKeys, "detach-keys", "", "Override the key sequence for detaching a container") - if dockerCli.HasExperimental() { - flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint") - flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory") - } - + flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint") + flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory") + flags.SetAnnotation("checkpoint", "experimental", nil) + flags.SetAnnotation("checkpoint-dir", "experimental", nil) return cmd } diff --git a/command/image/build.go b/command/image/build.go index dc18601900..5cf36cfd53 100644 --- a/command/image/build.go +++ b/command/image/build.go @@ -111,9 +111,8 @@ func NewBuildCommand(dockerCli *command.DockerCli) *cobra.Command { command.AddTrustedFlags(flags, true) - if dockerCli.HasExperimental() { - flags.BoolVar(&options.squash, "squash", false, "Squash newly built layers into a single new layer") - } + flags.BoolVar(&options.squash, "squash", false, "Squash newly built layers into a single new layer") + flags.SetAnnotation("squash", "experimental", nil) return cmd } From 1e10649f55dbe8a8cd3a91ffae624c9eab067567 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 3 Nov 2016 17:12:15 -0700 Subject: [PATCH 2/2] update cobra and use Tags Signed-off-by: Victor Vieux --- command/checkpoint/cmd.go | 1 + command/cli.go | 26 ++++++++++---------------- command/container/start.go | 2 +- command/plugin/cmd.go | 1 + command/stack/cmd.go | 1 + command/stack/deploy.go | 1 + 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/command/checkpoint/cmd.go b/command/checkpoint/cmd.go index 84084ab716..7f9e537779 100644 --- a/command/checkpoint/cmd.go +++ b/command/checkpoint/cmd.go @@ -17,6 +17,7 @@ func NewCheckpointCommand(dockerCli *command.DockerCli) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString()) }, + Tags: map[string]string{"experimental": ""}, } cmd.AddCommand( newCreateCommand(dockerCli), diff --git a/command/cli.go b/command/cli.go index 9b61492442..33a26c4c64 100644 --- a/command/cli.go +++ b/command/cli.go @@ -32,27 +32,21 @@ type Streams interface { // DockerCli represents the docker command line client. // Instances of the client can be returned from NewDockerCli. type DockerCli struct { - configFile *configfile.ConfigFile - in *InStream - out *OutStream - err io.Writer - keyFile string - client client.APIClient - hasExperimental *bool + configFile *configfile.ConfigFile + in *InStream + out *OutStream + err io.Writer + keyFile string + client client.APIClient } // HasExperimental returns true if experimental features are accessible func (cli *DockerCli) HasExperimental() bool { - if cli.hasExperimental == nil { - if cli.client == nil { - return false - } - enabled := false - cli.hasExperimental = &enabled - enabled, _ = cli.client.Ping(context.Background()) + if cli.client == nil { + return false } - - return *cli.hasExperimental + enabled, _ := cli.client.Ping(context.Background()) + return enabled } // Client returns the APIClient diff --git a/command/container/start.go b/command/container/start.go index e544028932..87e815fed5 100644 --- a/command/container/start.go +++ b/command/container/start.go @@ -46,8 +46,8 @@ func NewStartCommand(dockerCli *command.DockerCli) *cobra.Command { flags.StringVar(&opts.detachKeys, "detach-keys", "", "Override the key sequence for detaching a container") flags.StringVar(&opts.checkpoint, "checkpoint", "", "Restore from this checkpoint") - flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory") flags.SetAnnotation("checkpoint", "experimental", nil) + flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory") flags.SetAnnotation("checkpoint-dir", "experimental", nil) return cmd } diff --git a/command/plugin/cmd.go b/command/plugin/cmd.go index 80fa61cb1c..c78f43a8d4 100644 --- a/command/plugin/cmd.go +++ b/command/plugin/cmd.go @@ -17,6 +17,7 @@ func NewPluginCommand(dockerCli *command.DockerCli) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString()) }, + Tags: map[string]string{"experimental": ""}, } cmd.AddCommand( diff --git a/command/stack/cmd.go b/command/stack/cmd.go index 49fcedf209..70afec9c6d 100644 --- a/command/stack/cmd.go +++ b/command/stack/cmd.go @@ -17,6 +17,7 @@ func NewStackCommand(dockerCli *command.DockerCli) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString()) }, + Tags: map[string]string{"experimental": ""}, } cmd.AddCommand( newConfigCommand(dockerCli), diff --git a/command/stack/deploy.go b/command/stack/deploy.go index fcf55fb7d2..b0f6b455a8 100644 --- a/command/stack/deploy.go +++ b/command/stack/deploy.go @@ -36,6 +36,7 @@ func newDeployCommand(dockerCli *command.DockerCli) *cobra.Command { opts.namespace = strings.TrimSuffix(args[0], ".dab") return runDeploy(dockerCli, opts) }, + Tags: map[string]string{"experimental": ""}, } flags := cmd.Flags()