From d34ca0178e42cddc760316bbcb6a3aa8bea8b3ed Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 3 Nov 2016 17:12:15 -0700 Subject: [PATCH] update cobra and use Tags Signed-off-by: Victor Vieux --- cli/command/checkpoint/cmd.go | 1 + cli/command/cli.go | 26 +++++++++--------------- cli/command/container/start.go | 2 +- cli/command/plugin/cmd.go | 1 + cli/command/stack/cmd.go | 1 + cli/command/stack/deploy.go | 1 + cmd/docker/docker.go | 4 +--- vendor.conf | 2 +- vendor/github.com/spf13/cobra/command.go | 15 ++++++++------ 9 files changed, 26 insertions(+), 27 deletions(-) diff --git a/cli/command/checkpoint/cmd.go b/cli/command/checkpoint/cmd.go index 84084ab716..7f9e537779 100644 --- a/cli/command/checkpoint/cmd.go +++ b/cli/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/cli/command/cli.go b/cli/command/cli.go index 9b61492442..33a26c4c64 100644 --- a/cli/command/cli.go +++ b/cli/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/cli/command/container/start.go b/cli/command/container/start.go index e544028932..87e815fed5 100644 --- a/cli/command/container/start.go +++ b/cli/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/cli/command/plugin/cmd.go b/cli/command/plugin/cmd.go index 80fa61cb1c..c78f43a8d4 100644 --- a/cli/command/plugin/cmd.go +++ b/cli/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/cli/command/stack/cmd.go b/cli/command/stack/cmd.go index 49fcedf209..70afec9c6d 100644 --- a/cli/command/stack/cmd.go +++ b/cli/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/cli/command/stack/deploy.go b/cli/command/stack/deploy.go index fcf55fb7d2..b0f6b455a8 100644 --- a/cli/command/stack/deploy.go +++ b/cli/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() diff --git a/cmd/docker/docker.go b/cmd/docker/docker.go index 3b6e7f8633..65568e1e61 100644 --- a/cmd/docker/docker.go +++ b/cmd/docker/docker.go @@ -3,7 +3,6 @@ package main import ( "fmt" "os" - "strings" "github.com/Sirupsen/logrus" "github.com/docker/docker/cli" @@ -134,8 +133,7 @@ func hideExperimentalFeatures(cmd *cobra.Command) { for _, subcmd := range cmd.Commands() { // hide subcommands - name := strings.Split(subcmd.Use, " ")[0] - if name == "stack" || name == "deploy" || name == "checkpoint" || name == "plugin" { + if _, ok := subcmd.Tags["experimental"]; ok { subcmd.Hidden = true } } diff --git a/vendor.conf b/vendor.conf index 10b559b40b..fbb831ba49 100644 --- a/vendor.conf +++ b/vendor.conf @@ -123,7 +123,7 @@ github.com/matttproud/golang_protobuf_extensions fc2b8d3a73c4867e51861bbdd5ae3c1 github.com/pkg/errors 01fa4104b9c248c8945d14d9f128454d5b28d595 # cli -github.com/spf13/cobra v1.4.1 https://github.com/dnephin/cobra.git +github.com/spf13/cobra v1.5 https://github.com/dnephin/cobra.git github.com/spf13/pflag dabebe21bf790f782ea4c7bbd2efc430de182afd github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75 github.com/flynn-archive/go-shlex 3f9db97f856818214da2e1057f8ad84803971cff diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 892b07d300..2887208620 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -59,6 +59,9 @@ type Command struct { Deprecated string // Is this command hidden and should NOT show up in the list of available commands? Hidden bool + // Tags are key/value pairs that can be used by applications to identify or + // group commands + Tags map[string]string // Full set of flags flags *flag.FlagSet // Set of flags childrens of this command will inherit @@ -111,10 +114,10 @@ type Command struct { flagErrorBuf *bytes.Buffer - args []string // actual args parsed from flags - output *io.Writer // nil means stderr; use Out() method instead - usageFunc func(*Command) error // Usage can be defined by application - usageTemplate string // Can be defined by Application + args []string // actual args parsed from flags + output *io.Writer // nil means stderr; use Out() method instead + usageFunc func(*Command) error // Usage can be defined by application + usageTemplate string // Can be defined by Application flagErrorFunc func(*Command, error) error helpTemplate string // Can be defined by Application helpFunc func(*Command, []string) // Help can be defined by application @@ -417,7 +420,7 @@ func argsMinusFirstX(args []string, x string) []string { func isFlagArg(arg string) bool { return ((len(arg) >= 3 && arg[1] == '-') || - (len(arg) >= 2 && arg[0] == '-' && arg[1] != '-')) + (len(arg) >= 2 && arg[0] == '-' && arg[1] != '-')) } // Find the target command given the args and command tree @@ -820,7 +823,7 @@ func (c commandSorterByName) Less(i, j int) bool { return c[i].Name() < c[j].Nam // Commands returns a sorted slice of child commands. func (c *Command) Commands() []*Command { // do not sort commands if it already sorted or sorting was disabled - if EnableCommandSorting && !c.commandsAreSorted{ + if EnableCommandSorting && !c.commandsAreSorted { sort.Sort(commandSorterByName(c.commands)) c.commandsAreSorted = true }