diff.go 1.1 KB

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