Browse code

Remove use of Table from 'docker diff'

Signed-off-by: Doug Davis <dug@us.ibm.com>

Doug Davis authored on 2015/04/03 07:52:34
Showing 3 changed files
... ...
@@ -1,37 +1,40 @@
1 1
 package client
2 2
 
3 3
 import (
4
+	"encoding/json"
4 5
 	"fmt"
5 6
 
6
-	"github.com/docker/docker/engine"
7
+	"github.com/docker/docker/api/types"
7 8
 	"github.com/docker/docker/pkg/archive"
8 9
 	flag "github.com/docker/docker/pkg/mflag"
9 10
 )
10 11
 
11 12
 // CmdDiff shows changes on a container's filesystem.
12 13
 //
13
-// Each changed file is printed on a separate line, prefixed with a single character that indicates the status of the file: C (modified), A (added), or D (deleted).
14
+// Each changed file is printed on a separate line, prefixed with a single
15
+// character that indicates the status of the file: C (modified), A (added),
16
+// or D (deleted).
14 17
 //
15 18
 // Usage: docker diff CONTAINER
16 19
 func (cli *DockerCli) CmdDiff(args ...string) error {
17 20
 	cmd := cli.Subcmd("diff", "CONTAINER", "Inspect changes on a container's filesystem", true)
18 21
 	cmd.Require(flag.Exact, 1)
19
-
20 22
 	cmd.ParseFlags(args, true)
21 23
 
22
-	body, _, err := readBody(cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil))
23
-
24
+	rdr, _, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil)
24 25
 	if err != nil {
25 26
 		return err
26 27
 	}
27 28
 
28
-	outs := engine.NewTable("", 0)
29
-	if _, err := outs.ReadListFrom(body); err != nil {
29
+	changes := []types.ContainerChange{}
30
+	err = json.NewDecoder(rdr).Decode(&changes)
31
+	if err != nil {
30 32
 		return err
31 33
 	}
32
-	for _, change := range outs.Data {
34
+
35
+	for _, change := range changes {
33 36
 		var kind string
34
-		switch change.GetInt("Kind") {
37
+		switch change.Kind {
35 38
 		case archive.ChangeModify:
36 39
 			kind = "C"
37 40
 		case archive.ChangeAdd:
... ...
@@ -39,7 +42,8 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
39 39
 		case archive.ChangeDelete:
40 40
 			kind = "D"
41 41
 		}
42
-		fmt.Fprintf(cli.out, "%s %s\n", kind, change.Get("Path"))
42
+		fmt.Fprintf(cli.out, "%s %s\n", kind, change.Path)
43 43
 	}
44
+
44 45
 	return nil
45 46
 }
... ...
@@ -35,3 +35,9 @@ type ContainerWaitResponse struct {
35 35
 type ContainerCommitResponse struct {
36 36
 	ID string `json:"Id"`
37 37
 }
38
+
39
+// GET "/containers/{name:.*}/changes"
40
+type ContainerChange struct {
41
+	Kind int
42
+	Path string
43
+}
... ...
@@ -1,6 +1,7 @@
1 1
 package daemon
2 2
 
3 3
 import (
4
+	"encoding/json"
4 5
 	"fmt"
5 6
 
6 7
 	"github.com/docker/docker/engine"
... ...
@@ -17,21 +18,12 @@ func (daemon *Daemon) ContainerChanges(job *engine.Job) error {
17 17
 		return err
18 18
 	}
19 19
 
20
-	outs := engine.NewTable("", 0)
21 20
 	changes, err := container.Changes()
22 21
 	if err != nil {
23 22
 		return err
24 23
 	}
25 24
 
26
-	for _, change := range changes {
27
-		out := &engine.Env{}
28
-		if err := out.Import(change); err != nil {
29
-			return err
30
-		}
31
-		outs.Add(out)
32
-	}
33
-
34
-	if _, err := outs.WriteListTo(job.Stdout); err != nil {
25
+	if err = json.NewEncoder(job.Stdout).Encode(changes); err != nil {
35 26
 		return err
36 27
 	}
37 28