fix error handling

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
This commit is contained in:
Victor Vieux 2014-01-21 17:56:09 -08:00
parent 177f658882
commit f41e0cf048
4 changed files with 30 additions and 42 deletions

View file

@ -823,13 +823,13 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
var encounteredError error
for _, name := range cmd.Args() {
stream, _, err := cli.call("DELETE", "/images/"+name, nil, false)
body, _, err := readBody(cli.call("DELETE", "/images/"+name, nil, false))
if err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
encounteredError = fmt.Errorf("Error: failed to remove one or more images")
} else {
outs := engine.NewTable("Created", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
fmt.Fprintf(cli.err, "%s\n", err)
encounteredError = fmt.Errorf("Error: failed to remove one or more images")
continue
@ -859,16 +859,13 @@ func (cli *DockerCli) CmdHistory(args ...string) error {
return nil
}
stream, _, err := cli.call("GET", "/images/"+cmd.Arg(0)+"/history", nil, false)
if stream != nil {
defer stream.Close()
}
body, _, err := readBody(cli.call("GET", "/images/"+cmd.Arg(0)+"/history", nil, false))
if err != nil {
return err
}
outs := engine.NewTable("Created", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
return err
}
@ -1139,16 +1136,13 @@ func (cli *DockerCli) CmdImages(args ...string) error {
filter := cmd.Arg(0)
if *flViz || *flTree {
stream, _, err := cli.call("GET", "/images/json?all=1", nil, false)
if stream != nil {
defer stream.Close()
}
body, _, err := readBody(cli.call("GET", "/images/json?all=1", nil, false))
if err != nil {
return err
}
outs := engine.NewTable("Created", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
return err
}
@ -1211,16 +1205,14 @@ func (cli *DockerCli) CmdImages(args ...string) error {
v.Set("all", "1")
}
stream, _, err := cli.call("GET", "/images/json?"+v.Encode(), nil, false)
if stream != nil {
defer stream.Close()
}
body, _, err := readBody(cli.call("GET", "/images/json?"+v.Encode(), nil, false))
if err != nil {
return err
}
outs := engine.NewTable("Created", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
return err
}
@ -1532,16 +1524,14 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
return nil
}
stream, _, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, false)
if stream != nil {
defer stream.Close()
}
body, _, err := readBody(cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, false))
if err != nil {
return err
}
outs := engine.NewTable("", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
return err
}
for _, change := range outs.Data {
@ -1674,15 +1664,14 @@ func (cli *DockerCli) CmdSearch(args ...string) error {
v := url.Values{}
v.Set("term", cmd.Arg(0))
stream, _, err := cli.call("GET", "/images/search?"+v.Encode(), nil, true)
if stream != nil {
defer stream.Close()
}
body, _, err := readBody(cli.call("GET", "/images/search?"+v.Encode(), nil, false))
if err != nil {
return err
}
outs := engine.NewTable("star_count", 0)
if _, err := outs.ReadListFrom(stream); err != nil {
if _, err := outs.ReadListFrom(body); err != nil {
return err
}
w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0)

View file

@ -5,7 +5,6 @@ import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"sort"
"strconv"
"strings"
@ -325,15 +324,10 @@ func (t *Table) WriteTo(dst io.Writer) (n int64, err error) {
return n, nil
}
func (t *Table) ReadListFrom(src io.Reader) (n int64, err error) {
func (t *Table) ReadListFrom(src []byte) (n int64, err error) {
var array []interface{}
content, err := ioutil.ReadAll(src)
if err != nil {
return -1, err
}
if err := json.Unmarshal(content, &array); err != nil {
if err := json.Unmarshal(src, &array); err != nil {
return -1, err
}
@ -347,7 +341,7 @@ func (t *Table) ReadListFrom(src io.Reader) (n int64, err error) {
}
}
return int64(len(content)), nil
return int64(len(src)), nil
}
func (t *Table) ReadFrom(src io.Reader) (n int64, err error) {

View file

@ -5,6 +5,7 @@ import (
"container/ring"
"fmt"
"io"
"io/ioutil"
"sync"
)
@ -228,7 +229,11 @@ func (o *Output) AddListTable() (dst *Table, err error) {
o.tasks.Add(1)
go func() {
defer o.tasks.Done()
if _, err := dst.ReadListFrom(src); err != nil {
content, err := ioutil.ReadAll(src)
if err != nil {
return
}
if _, err := dst.ReadListFrom(content); err != nil {
return
}
}()

View file

@ -170,7 +170,7 @@ func TestGetImagesJSON(t *testing.T) {
assertHttpNotError(r, t)
images := engine.NewTable("Created", 0)
if _, err := images.ReadListFrom(r.Body); err != nil {
if _, err := images.ReadListFrom(r.Body.Bytes()); err != nil {
t.Fatal(err)
}
@ -205,7 +205,7 @@ func TestGetImagesJSON(t *testing.T) {
assertHttpNotError(r2, t)
images2 := engine.NewTable("ID", 0)
if _, err := images2.ReadListFrom(r2.Body); err != nil {
if _, err := images2.ReadListFrom(r2.Body.Bytes()); err != nil {
t.Fatal(err)
}
@ -238,7 +238,7 @@ func TestGetImagesJSON(t *testing.T) {
assertHttpNotError(r3, t)
images3 := engine.NewTable("ID", 0)
if _, err := images3.ReadListFrom(r3.Body); err != nil {
if _, err := images3.ReadListFrom(r3.Body.Bytes()); err != nil {
t.Fatal(err)
}
@ -264,7 +264,7 @@ func TestGetImagesHistory(t *testing.T) {
assertHttpNotError(r, t)
outs := engine.NewTable("Created", 0)
if _, err := outs.ReadListFrom(r.Body); err != nil {
if _, err := outs.ReadListFrom(r.Body.Bytes()); err != nil {
t.Fatal(err)
}
if len(outs.Data) != 1 {
@ -409,7 +409,7 @@ func TestGetContainersChanges(t *testing.T) {
}
assertHttpNotError(r, t)
outs := engine.NewTable("", 0)
if _, err := outs.ReadListFrom(r.Body); err != nil {
if _, err := outs.ReadListFrom(r.Body.Bytes()); err != nil {
t.Fatal(err)
}