Browse Source

Merge pull request #12040 from duglin/TableFromDiff

Remove use of Table from 'docker diff'
Phil Estes 10 years ago
parent
commit
3f1590f679
3 changed files with 22 additions and 20 deletions
  1. 14 10
      api/client/diff.go
  2. 6 0
      api/types/types.go
  3. 2 10
      daemon/changes.go

+ 14 - 10
api/client/diff.go

@@ -1,37 +1,40 @@
 package client
 
 import (
+	"encoding/json"
 	"fmt"
 
-	"github.com/docker/docker/engine"
+	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/pkg/archive"
 	flag "github.com/docker/docker/pkg/mflag"
 )
 
 // CmdDiff shows changes on a container's filesystem.
 //
-// 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).
+// 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).
 //
 // Usage: docker diff CONTAINER
 func (cli *DockerCli) CmdDiff(args ...string) error {
 	cmd := cli.Subcmd("diff", "CONTAINER", "Inspect changes on a container's filesystem", true)
 	cmd.Require(flag.Exact, 1)
-
 	cmd.ParseFlags(args, true)
 
-	body, _, err := readBody(cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil))
-
+	rdr, _, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil)
 	if err != nil {
 		return err
 	}
 
-	outs := engine.NewTable("", 0)
-	if _, err := outs.ReadListFrom(body); err != nil {
+	changes := []types.ContainerChange{}
+	err = json.NewDecoder(rdr).Decode(&changes)
+	if err != nil {
 		return err
 	}
-	for _, change := range outs.Data {
+
+	for _, change := range changes {
 		var kind string
-		switch change.GetInt("Kind") {
+		switch change.Kind {
 		case archive.ChangeModify:
 			kind = "C"
 		case archive.ChangeAdd:
@@ -39,7 +42,8 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
 		case archive.ChangeDelete:
 			kind = "D"
 		}
-		fmt.Fprintf(cli.out, "%s %s\n", kind, change.Get("Path"))
+		fmt.Fprintf(cli.out, "%s %s\n", kind, change.Path)
 	}
+
 	return nil
 }

+ 6 - 0
api/types/types.go

@@ -35,3 +35,9 @@ type ContainerWaitResponse struct {
 type ContainerCommitResponse struct {
 	ID string `json:"Id"`
 }
+
+// GET "/containers/{name:.*}/changes"
+type ContainerChange struct {
+	Kind int
+	Path string
+}

+ 2 - 10
daemon/changes.go

@@ -1,6 +1,7 @@
 package daemon
 
 import (
+	"encoding/json"
 	"fmt"
 
 	"github.com/docker/docker/engine"
@@ -17,21 +18,12 @@ func (daemon *Daemon) ContainerChanges(job *engine.Job) error {
 		return err
 	}
 
-	outs := engine.NewTable("", 0)
 	changes, err := container.Changes()
 	if err != nil {
 		return err
 	}
 
-	for _, change := range changes {
-		out := &engine.Env{}
-		if err := out.Import(change); err != nil {
-			return err
-		}
-		outs.Add(out)
-	}
-
-	if _, err := outs.WriteListTo(job.Stdout); err != nil {
+	if err = json.NewEncoder(job.Stdout).Encode(changes); err != nil {
 		return err
 	}