diff.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package client
  2. import (
  3. "fmt"
  4. Cli "github.com/docker/docker/cli"
  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
  11. // character that indicates the status of the file: C (modified), A (added),
  12. // or D (deleted).
  13. //
  14. // Usage: docker diff CONTAINER
  15. func (cli *DockerCli) CmdDiff(args ...string) error {
  16. cmd := Cli.Subcmd("diff", []string{"CONTAINER"}, Cli.DockerCommands["diff"].Description, true)
  17. cmd.Require(flag.Exact, 1)
  18. cmd.ParseFlags(args, true)
  19. if cmd.Arg(0) == "" {
  20. return fmt.Errorf("Container name cannot be empty")
  21. }
  22. changes, err := cli.client.ContainerDiff(cmd.Arg(0))
  23. if err != nil {
  24. return err
  25. }
  26. for _, change := range changes {
  27. var kind string
  28. switch change.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.Path)
  37. }
  38. return nil
  39. }