From 315c34953ddc1512c62cadca39bd9cee43b1c422 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Wed, 30 Nov 2016 13:23:18 -0800 Subject: [PATCH] Show usage when `docker swarm update` has no flags This fix tries to address the issue raised in 24352. Previously, when `docker swarm update` has no flags, the output is ``` Swarm updated. ``` even though nothing was updated. This could be misleading for users. This fix tries to address the issue by adding a `PreRunE` function in the command so that in case no flag is provided (`cmd.Flags().NFlag() == 0`), the usage will be outputed instead. An integration has been added to cover the changes. This fix fixes 24352. Signed-off-by: Yong Tang (cherry picked from commit 5aa5a1cb008963ee6a99011b8f7cd1f489e2bc6a) Signed-off-by: Victor Vieux --- cli/command/swarm/update.go | 6 ++++++ integration-cli/docker_cli_swarm_test.go | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/cli/command/swarm/update.go b/cli/command/swarm/update.go index cb0d83ef26..dbbd268725 100644 --- a/cli/command/swarm/update.go +++ b/cli/command/swarm/update.go @@ -23,6 +23,12 @@ func newUpdateCommand(dockerCli *command.DockerCli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runUpdate(dockerCli, cmd.Flags(), opts) }, + PreRunE: func(cmd *cobra.Command, args []string) error { + if cmd.Flags().NFlag() == 0 { + return pflag.ErrHelp + } + return nil + }, } cmd.Flags().BoolVar(&opts.autolock, flagAutolock, false, "Change manager autolocking setting (true|false)") diff --git a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go index 376f366782..ed7a055bb6 100644 --- a/integration-cli/docker_cli_swarm_test.go +++ b/integration-cli/docker_cli_swarm_test.go @@ -1086,6 +1086,24 @@ func (s *DockerSwarmSuite) TestSwarmNetworkIPAMOptions(c *check.C) { c.Assert(strings.TrimSpace(out), checker.Equals, "map[foo:bar]") } +// TODO: migrate to a unit test +// This test could be migrated to unit test and save costly integration test, +// once PR #29143 is merged. +func (s *DockerSwarmSuite) TestSwarmUpdateWithoutArgs(c *check.C) { + d := s.AddDaemon(c, true, true) + + expectedOutput := ` +Usage: docker swarm update [OPTIONS] + +Update the swarm + +Options:` + + out, err := d.Cmd("swarm", "update") + c.Assert(err, checker.IsNil, check.Commentf("out: %v", out)) + c.Assert(out, checker.Contains, expectedOutput, check.Commentf(out)) +} + func (s *DockerTrustedSwarmSuite) TestTrustedServiceCreate(c *check.C) { d := s.swarmSuite.AddDaemon(c, true, true)