diff --git a/api/client/diff.go b/api/client/diff.go index 0ba7b53f36..3f6c28384e 100644 --- a/api/client/diff.go +++ b/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 } diff --git a/api/types/types.go b/api/types/types.go index 85b300290a..f4c6dc34aa 100644 --- a/api/types/types.go +++ b/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 +} diff --git a/daemon/changes.go b/daemon/changes.go index aa9baab0a5..7f261a8a7f 100644 --- a/daemon/changes.go +++ b/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 }