From 73d63ec5a67b12a01549831e45ce8dc98492be48 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Wed, 2 Nov 2016 17:43:32 -0700 Subject: [PATCH] always add but hide experimental cmds and flags Signed-off-by: Victor Vieux --- docker.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/docker.go b/docker.go index 53e14f7ec3..3b6e7f8633 100644 --- a/docker.go +++ b/docker.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os" + "strings" "github.com/Sirupsen/logrus" "github.com/docker/docker/cli" @@ -33,7 +34,8 @@ func newDockerCommand(dockerCli *command.DockerCli) *cobra.Command { showVersion() return nil } - fmt.Fprintf(dockerCli.Err(), "\n"+cmd.UsageString()) + cmd.SetOutput(dockerCli.Err()) + cmd.HelpFunc()(cmd, args) return nil }, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { @@ -45,6 +47,22 @@ func newDockerCommand(dockerCli *command.DockerCli) *cobra.Command { } cli.SetupRootCommand(cmd) + cmd.SetHelpFunc(func(ccmd *cobra.Command, args []string) { + var err error + if dockerCli.Client() == nil { + // flags must be the top-level command flags, not cmd.Flags() + opts.Common.SetDefaultOptions(flags) + dockerPreRun(opts) + err = dockerCli.Initialize(opts) + } + if err != nil || !dockerCli.HasExperimental() { + hideExperimentalFeatures(ccmd) + } + if err := ccmd.Help(); err != nil { + ccmd.Println(err) + } + }) + flags = cmd.Flags() flags.BoolVarP(&opts.Version, "version", "v", false, "Print version information and quit") flags.StringVar(&opts.ConfigDir, "config", cliconfig.ConfigDir(), "Location of client config files") @@ -105,3 +123,20 @@ func dockerPreRun(opts *cliflags.ClientOptions) { utils.EnableDebug() } } + +func hideExperimentalFeatures(cmd *cobra.Command) { + // hide flags + cmd.Flags().VisitAll(func(f *pflag.Flag) { + if _, ok := f.Annotations["experimental"]; ok { + f.Hidden = true + } + }) + + for _, subcmd := range cmd.Commands() { + // hide subcommands + name := strings.Split(subcmd.Use, " ")[0] + if name == "stack" || name == "deploy" || name == "checkpoint" || name == "plugin" { + subcmd.Hidden = true + } + } +}