Browse code

fix error handling

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/01/22 10:56:09
Showing 4 changed files
... ...
@@ -823,13 +823,13 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
823 823
 
824 824
 	var encounteredError error
825 825
 	for _, name := range cmd.Args() {
826
-		stream, _, err := cli.call("DELETE", "/images/"+name, nil, false)
826
+		body, _, err := readBody(cli.call("DELETE", "/images/"+name, nil, false))
827 827
 		if err != nil {
828 828
 			fmt.Fprintf(cli.err, "%s\n", err)
829 829
 			encounteredError = fmt.Errorf("Error: failed to remove one or more images")
830 830
 		} else {
831 831
 			outs := engine.NewTable("Created", 0)
832
-			if _, err := outs.ReadListFrom(stream); err != nil {
832
+			if _, err := outs.ReadListFrom(body); err != nil {
833 833
 				fmt.Fprintf(cli.err, "%s\n", err)
834 834
 				encounteredError = fmt.Errorf("Error: failed to remove one or more images")
835 835
 				continue
... ...
@@ -859,16 +859,13 @@ func (cli *DockerCli) CmdHistory(args ...string) error {
859 859
 		return nil
860 860
 	}
861 861
 
862
-	stream, _, err := cli.call("GET", "/images/"+cmd.Arg(0)+"/history", nil, false)
863
-	if stream != nil {
864
-		defer stream.Close()
865
-	}
862
+	body, _, err := readBody(cli.call("GET", "/images/"+cmd.Arg(0)+"/history", nil, false))
866 863
 	if err != nil {
867 864
 		return err
868 865
 	}
869 866
 
870 867
 	outs := engine.NewTable("Created", 0)
871
-	if _, err := outs.ReadListFrom(stream); err != nil {
868
+	if _, err := outs.ReadListFrom(body); err != nil {
872 869
 		return err
873 870
 	}
874 871
 
... ...
@@ -1139,16 +1136,13 @@ func (cli *DockerCli) CmdImages(args ...string) error {
1139 1139
 	filter := cmd.Arg(0)
1140 1140
 
1141 1141
 	if *flViz || *flTree {
1142
-		stream, _, err := cli.call("GET", "/images/json?all=1", nil, false)
1143
-		if stream != nil {
1144
-			defer stream.Close()
1145
-		}
1142
+		body, _, err := readBody(cli.call("GET", "/images/json?all=1", nil, false))
1146 1143
 		if err != nil {
1147 1144
 			return err
1148 1145
 		}
1149 1146
 
1150 1147
 		outs := engine.NewTable("Created", 0)
1151
-		if _, err := outs.ReadListFrom(stream); err != nil {
1148
+		if _, err := outs.ReadListFrom(body); err != nil {
1152 1149
 			return err
1153 1150
 		}
1154 1151
 
... ...
@@ -1211,16 +1205,14 @@ func (cli *DockerCli) CmdImages(args ...string) error {
1211 1211
 			v.Set("all", "1")
1212 1212
 		}
1213 1213
 
1214
-		stream, _, err := cli.call("GET", "/images/json?"+v.Encode(), nil, false)
1215
-		if stream != nil {
1216
-			defer stream.Close()
1217
-		}
1214
+		body, _, err := readBody(cli.call("GET", "/images/json?"+v.Encode(), nil, false))
1215
+
1218 1216
 		if err != nil {
1219 1217
 			return err
1220 1218
 		}
1221 1219
 
1222 1220
 		outs := engine.NewTable("Created", 0)
1223
-		if _, err := outs.ReadListFrom(stream); err != nil {
1221
+		if _, err := outs.ReadListFrom(body); err != nil {
1224 1222
 			return err
1225 1223
 		}
1226 1224
 
... ...
@@ -1532,16 +1524,14 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
1532 1532
 		return nil
1533 1533
 	}
1534 1534
 
1535
-	stream, _, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, false)
1536
-	if stream != nil {
1537
-		defer stream.Close()
1538
-	}
1535
+	body, _, err := readBody(cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, false))
1536
+
1539 1537
 	if err != nil {
1540 1538
 		return err
1541 1539
 	}
1542 1540
 
1543 1541
 	outs := engine.NewTable("", 0)
1544
-	if _, err := outs.ReadListFrom(stream); err != nil {
1542
+	if _, err := outs.ReadListFrom(body); err != nil {
1545 1543
 		return err
1546 1544
 	}
1547 1545
 	for _, change := range outs.Data {
... ...
@@ -1674,15 +1664,14 @@ func (cli *DockerCli) CmdSearch(args ...string) error {
1674 1674
 
1675 1675
 	v := url.Values{}
1676 1676
 	v.Set("term", cmd.Arg(0))
1677
-	stream, _, err := cli.call("GET", "/images/search?"+v.Encode(), nil, true)
1678
-	if stream != nil {
1679
-		defer stream.Close()
1680
-	}
1677
+
1678
+	body, _, err := readBody(cli.call("GET", "/images/search?"+v.Encode(), nil, false))
1679
+
1681 1680
 	if err != nil {
1682 1681
 		return err
1683 1682
 	}
1684 1683
 	outs := engine.NewTable("star_count", 0)
1685
-	if _, err := outs.ReadListFrom(stream); err != nil {
1684
+	if _, err := outs.ReadListFrom(body); err != nil {
1686 1685
 		return err
1687 1686
 	}
1688 1687
 	w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0)
... ...
@@ -5,7 +5,6 @@ import (
5 5
 	"encoding/json"
6 6
 	"fmt"
7 7
 	"io"
8
-	"io/ioutil"
9 8
 	"sort"
10 9
 	"strconv"
11 10
 	"strings"
... ...
@@ -325,15 +324,10 @@ func (t *Table) WriteTo(dst io.Writer) (n int64, err error) {
325 325
 	return n, nil
326 326
 }
327 327
 
328
-func (t *Table) ReadListFrom(src io.Reader) (n int64, err error) {
328
+func (t *Table) ReadListFrom(src []byte) (n int64, err error) {
329 329
 	var array []interface{}
330 330
 
331
-	content, err := ioutil.ReadAll(src)
332
-	if err != nil {
333
-		return -1, err
334
-	}
335
-
336
-	if err := json.Unmarshal(content, &array); err != nil {
331
+	if err := json.Unmarshal(src, &array); err != nil {
337 332
 		return -1, err
338 333
 	}
339 334
 
... ...
@@ -347,7 +341,7 @@ func (t *Table) ReadListFrom(src io.Reader) (n int64, err error) {
347 347
 		}
348 348
 	}
349 349
 
350
-	return int64(len(content)), nil
350
+	return int64(len(src)), nil
351 351
 }
352 352
 
353 353
 func (t *Table) ReadFrom(src io.Reader) (n int64, err error) {
... ...
@@ -5,6 +5,7 @@ import (
5 5
 	"container/ring"
6 6
 	"fmt"
7 7
 	"io"
8
+	"io/ioutil"
8 9
 	"sync"
9 10
 )
10 11
 
... ...
@@ -228,7 +229,11 @@ func (o *Output) AddListTable() (dst *Table, err error) {
228 228
 	o.tasks.Add(1)
229 229
 	go func() {
230 230
 		defer o.tasks.Done()
231
-		if _, err := dst.ReadListFrom(src); err != nil {
231
+		content, err := ioutil.ReadAll(src)
232
+		if err != nil {
233
+			return
234
+		}
235
+		if _, err := dst.ReadListFrom(content); err != nil {
232 236
 			return
233 237
 		}
234 238
 	}()
... ...
@@ -170,7 +170,7 @@ func TestGetImagesJSON(t *testing.T) {
170 170
 	assertHttpNotError(r, t)
171 171
 
172 172
 	images := engine.NewTable("Created", 0)
173
-	if _, err := images.ReadListFrom(r.Body); err != nil {
173
+	if _, err := images.ReadListFrom(r.Body.Bytes()); err != nil {
174 174
 		t.Fatal(err)
175 175
 	}
176 176
 
... ...
@@ -205,7 +205,7 @@ func TestGetImagesJSON(t *testing.T) {
205 205
 	assertHttpNotError(r2, t)
206 206
 
207 207
 	images2 := engine.NewTable("ID", 0)
208
-	if _, err := images2.ReadListFrom(r2.Body); err != nil {
208
+	if _, err := images2.ReadListFrom(r2.Body.Bytes()); err != nil {
209 209
 		t.Fatal(err)
210 210
 	}
211 211
 
... ...
@@ -238,7 +238,7 @@ func TestGetImagesJSON(t *testing.T) {
238 238
 	assertHttpNotError(r3, t)
239 239
 
240 240
 	images3 := engine.NewTable("ID", 0)
241
-	if _, err := images3.ReadListFrom(r3.Body); err != nil {
241
+	if _, err := images3.ReadListFrom(r3.Body.Bytes()); err != nil {
242 242
 		t.Fatal(err)
243 243
 	}
244 244
 
... ...
@@ -264,7 +264,7 @@ func TestGetImagesHistory(t *testing.T) {
264 264
 	assertHttpNotError(r, t)
265 265
 
266 266
 	outs := engine.NewTable("Created", 0)
267
-	if _, err := outs.ReadListFrom(r.Body); err != nil {
267
+	if _, err := outs.ReadListFrom(r.Body.Bytes()); err != nil {
268 268
 		t.Fatal(err)
269 269
 	}
270 270
 	if len(outs.Data) != 1 {
... ...
@@ -409,7 +409,7 @@ func TestGetContainersChanges(t *testing.T) {
409 409
 	}
410 410
 	assertHttpNotError(r, t)
411 411
 	outs := engine.NewTable("", 0)
412
-	if _, err := outs.ReadListFrom(r.Body); err != nil {
412
+	if _, err := outs.ReadListFrom(r.Body.Bytes()); err != nil {
413 413
 		t.Fatal(err)
414 414
 	}
415 415