diff.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package client
  2. import (
  3. "fmt"
  4. "github.com/docker/docker/engine"
  5. "github.com/docker/docker/pkg/archive"
  6. flag "github.com/docker/docker/pkg/mflag"
  7. )
  8. // CmdDiff shows changes on a container's filesystem.
  9. //
  10. // 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).
  11. //
  12. // Usage: docker diff CONTAINER
  13. func (cli *DockerCli) CmdDiff(args ...string) error {
  14. cmd := cli.Subcmd("diff", "CONTAINER", "Inspect changes on a container's filesystem", true)
  15. cmd.Require(flag.Exact, 1)
  16. cmd.ParseFlags(args, true)
  17. body, _, err := readBody(cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil))
  18. if err != nil {
  19. return err
  20. }
  21. outs := engine.NewTable("", 0)
  22. if _, err := outs.ReadListFrom(body); err != nil {
  23. return err
  24. }
  25. for _, change := range outs.Data {
  26. var kind string
  27. switch change.GetInt("Kind") {
  28. case archive.ChangeModify:
  29. kind = "C"
  30. case archive.ChangeAdd:
  31. kind = "A"
  32. case archive.ChangeDelete:
  33. kind = "D"
  34. }
  35. fmt.Fprintf(cli.out, "%s %s\n", kind, change.Get("Path"))
  36. }
  37. return nil
  38. }