Remove use of Table from 'docker diff'

Signed-off-by: Doug Davis <dug@us.ibm.com>
This commit is contained in:
Doug Davis 2015-04-02 15:52:34 -07:00
parent 104b20a133
commit 49c72506ac
3 changed files with 22 additions and 20 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}