From 5a6db4fd44c0e05c8b185174a9aa380c9cc4f719 Mon Sep 17 00:00:00 2001 From: Qiang Huang Date: Tue, 5 May 2015 15:59:17 +0800 Subject: [PATCH] a few cleanups for client output Signed-off-by: Qiang Huang --- api/client/cli.go | 3 +-- api/client/help.go | 4 +--- api/client/inspect.go | 1 - api/client/kill.go | 9 ++++++--- api/client/pause.go | 9 ++++++--- api/client/restart.go | 9 ++++++--- api/client/rm.go | 9 ++++++--- api/client/rmi.go | 11 +++++++---- api/client/start.go | 6 +++++- api/client/stop.go | 9 ++++++--- api/client/unpause.go | 9 ++++++--- api/client/wait.go | 9 ++++++--- integration-cli/docker_cli_rm_test.go | 4 ++-- 13 files changed, 58 insertions(+), 34 deletions(-) diff --git a/api/client/cli.go b/api/client/cli.go index 600d4cc5a3..7d9610078c 100644 --- a/api/client/cli.go +++ b/api/client/cli.go @@ -90,8 +90,7 @@ func (cli *DockerCli) Cmd(args ...string) error { if len(args) > 0 { method, exists := cli.getMethod(args[0]) if !exists { - fmt.Fprintf(cli.err, "docker: '%s' is not a docker command. See 'docker --help'.\n", args[0]) - os.Exit(1) + return fmt.Errorf("docker: '%s' is not a docker command. See 'docker --help'.", args[0]) } return method(args[1:]...) } diff --git a/api/client/help.go b/api/client/help.go index e95387967a..5dee9ba8a1 100644 --- a/api/client/help.go +++ b/api/client/help.go @@ -2,7 +2,6 @@ package client import ( "fmt" - "os" flag "github.com/docker/docker/pkg/mflag" ) @@ -23,8 +22,7 @@ func (cli *DockerCli) CmdHelp(args ...string) error { if len(args) > 0 { method, exists := cli.getMethod(args[0]) if !exists { - fmt.Fprintf(cli.err, "docker: '%s' is not a docker command. See 'docker --help'.\n", args[0]) - os.Exit(1) + return fmt.Errorf("docker: '%s' is not a docker command. See 'docker --help'.", args[0]) } else { method("--help") return nil diff --git a/api/client/inspect.go b/api/client/inspect.go index d60d47ad35..8d9c086101 100644 --- a/api/client/inspect.go +++ b/api/client/inspect.go @@ -26,7 +26,6 @@ func (cli *DockerCli) CmdInspect(args ...string) error { if *tmplStr != "" { var err error if tmpl, err = template.New("").Funcs(funcMap).Parse(*tmplStr); err != nil { - fmt.Fprintf(cli.err, "Template parsing error: %v\n", err) return StatusError{StatusCode: 64, Status: "Template parsing error: " + err.Error()} } diff --git a/api/client/kill.go b/api/client/kill.go index 7ad1e56133..becff3b7e0 100644 --- a/api/client/kill.go +++ b/api/client/kill.go @@ -16,14 +16,17 @@ func (cli *DockerCli) CmdKill(args ...string) error { cmd.ParseFlags(args, true) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { if _, _, err := readBody(cli.call("POST", fmt.Sprintf("/containers/%s/kill?signal=%s", name, *signal), nil, nil)); err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to kill one or more containers") + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to kill containers: %v", errNames) + } + return nil } diff --git a/api/client/pause.go b/api/client/pause.go index 6c807410ba..2f8f3c83f1 100644 --- a/api/client/pause.go +++ b/api/client/pause.go @@ -14,14 +14,17 @@ func (cli *DockerCli) CmdPause(args ...string) error { cmd.Require(flag.Min, 1) cmd.ParseFlags(args, false) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { if _, _, err := readBody(cli.call("POST", fmt.Sprintf("/containers/%s/pause", name), nil, nil)); err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to pause container named %s", name) + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to pause containers: %v", errNames) + } + return nil } diff --git a/api/client/restart.go b/api/client/restart.go index 41b10676bd..c769fb6d27 100644 --- a/api/client/restart.go +++ b/api/client/restart.go @@ -21,15 +21,18 @@ func (cli *DockerCli) CmdRestart(args ...string) error { v := url.Values{} v.Set("t", strconv.Itoa(*nSeconds)) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { _, _, err := readBody(cli.call("POST", "/containers/"+name+"/restart?"+v.Encode(), nil, nil)) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to restart one or more containers") + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to restart containers: %v", errNames) + } + return nil } diff --git a/api/client/rm.go b/api/client/rm.go index d99f32e2fd..e6f3aeaeba 100644 --- a/api/client/rm.go +++ b/api/client/rm.go @@ -32,7 +32,7 @@ func (cli *DockerCli) CmdRm(args ...string) error { val.Set("force", "1") } - var encounteredError error + var errNames []string for _, name := range cmd.Args() { if name == "" { return fmt.Errorf("Container name cannot be empty") @@ -42,10 +42,13 @@ func (cli *DockerCli) CmdRm(args ...string) error { _, _, err := readBody(cli.call("DELETE", "/containers/"+name+"?"+val.Encode(), nil, nil)) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to remove one or more containers") + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to remove containers: %v", errNames) + } + return nil } diff --git a/api/client/rmi.go b/api/client/rmi.go index a8590dc820..36f2036d13 100644 --- a/api/client/rmi.go +++ b/api/client/rmi.go @@ -29,17 +29,17 @@ func (cli *DockerCli) CmdRmi(args ...string) error { v.Set("noprune", "1") } - var encounteredError error + var errNames []string for _, name := range cmd.Args() { rdr, _, err := cli.call("DELETE", "/images/"+name+"?"+v.Encode(), nil, nil) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to remove one or more images") + errNames = append(errNames, name) } else { dels := []types.ImageDelete{} if err := json.NewDecoder(rdr).Decode(&dels); err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to remove one or more images") + errNames = append(errNames, name) continue } @@ -52,5 +52,8 @@ func (cli *DockerCli) CmdRmi(args ...string) error { } } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to remove images: %v", errNames) + } + return nil } diff --git a/api/client/start.go b/api/client/start.go index b290524caf..55f307f522 100644 --- a/api/client/start.go +++ b/api/client/start.go @@ -120,6 +120,7 @@ func (cli *DockerCli) CmdStart(args ...string) error { } var encounteredError error + var errNames []string for _, name := range cmd.Args() { _, _, err := readBody(cli.call("POST", "/containers/"+name+"/start", nil, nil)) if err != nil { @@ -127,7 +128,7 @@ func (cli *DockerCli) CmdStart(args ...string) error { // attach and openStdin is false means it could be starting multiple containers // when a container start failed, show the error message and start next fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to start one or more containers") + errNames = append(errNames, name) } else { encounteredError = err } @@ -138,6 +139,9 @@ func (cli *DockerCli) CmdStart(args ...string) error { } } + if len(errNames) > 0 { + encounteredError = fmt.Errorf("Error: failed to start containers: %v", errNames) + } if encounteredError != nil { return encounteredError } diff --git a/api/client/stop.go b/api/client/stop.go index 08a1f5ba15..9551911ffd 100644 --- a/api/client/stop.go +++ b/api/client/stop.go @@ -23,15 +23,18 @@ func (cli *DockerCli) CmdStop(args ...string) error { v := url.Values{} v.Set("t", strconv.Itoa(*nSeconds)) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { _, _, err := readBody(cli.call("POST", "/containers/"+name+"/stop?"+v.Encode(), nil, nil)) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to stop one or more containers") + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to stop containers: %v", errNames) + } + return nil } diff --git a/api/client/unpause.go b/api/client/unpause.go index bcecb46336..dceeb23af9 100644 --- a/api/client/unpause.go +++ b/api/client/unpause.go @@ -14,14 +14,17 @@ func (cli *DockerCli) CmdUnpause(args ...string) error { cmd.Require(flag.Min, 1) cmd.ParseFlags(args, false) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { if _, _, err := readBody(cli.call("POST", fmt.Sprintf("/containers/%s/unpause", name), nil, nil)); err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to unpause container named %s", name) + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%s\n", name) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to unpause containers: %v", errNames) + } + return nil } diff --git a/api/client/wait.go b/api/client/wait.go index 8f34b24521..bfec19e24b 100644 --- a/api/client/wait.go +++ b/api/client/wait.go @@ -17,15 +17,18 @@ func (cli *DockerCli) CmdWait(args ...string) error { cmd.ParseFlags(args, true) - var encounteredError error + var errNames []string for _, name := range cmd.Args() { status, err := waitForExit(cli, name) if err != nil { fmt.Fprintf(cli.err, "%s\n", err) - encounteredError = fmt.Errorf("Error: failed to wait one or more containers") + errNames = append(errNames, name) } else { fmt.Fprintf(cli.out, "%d\n", status) } } - return encounteredError + if len(errNames) > 0 { + return fmt.Errorf("Error: failed to wait containers: %v", errNames) + } + return nil } diff --git a/integration-cli/docker_cli_rm_test.go b/integration-cli/docker_cli_rm_test.go index ba4e0e6bfd..f5884dc0fc 100644 --- a/integration-cli/docker_cli_rm_test.go +++ b/integration-cli/docker_cli_rm_test.go @@ -105,8 +105,8 @@ func (s *DockerSuite) TestRmContainerOrphaning(c *check.C) { func (s *DockerSuite) TestRmInvalidContainer(c *check.C) { if out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "rm", "unknown")); err == nil { c.Fatal("Expected error on rm unknown container, got none") - } else if !strings.Contains(out, "failed to remove one or more containers") { - c.Fatalf("Expected output to contain 'failed to remove one or more containers', got %q", out) + } else if !strings.Contains(out, "failed to remove containers") { + c.Fatalf("Expected output to contain 'failed to remove containers', got %q", out) } }