github.com/portworx/docker@v1.12.1/api/client/container/diff.go (about) 1 package container 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/client" 9 "github.com/docker/docker/cli" 10 "github.com/docker/docker/pkg/archive" 11 "github.com/spf13/cobra" 12 ) 13 14 type diffOptions struct { 15 container string 16 } 17 18 // NewDiffCommand creates a new cobra.Command for `docker diff` 19 func NewDiffCommand(dockerCli *client.DockerCli) *cobra.Command { 20 var opts diffOptions 21 22 cmd := &cobra.Command{ 23 Use: "diff CONTAINER", 24 Short: "Inspect changes on a container's filesystem", 25 Args: cli.ExactArgs(1), 26 RunE: func(cmd *cobra.Command, args []string) error { 27 opts.container = args[0] 28 return runDiff(dockerCli, &opts) 29 }, 30 } 31 cmd.SetFlagErrorFunc(flagErrorFunc) 32 33 return cmd 34 } 35 36 func runDiff(dockerCli *client.DockerCli, opts *diffOptions) error { 37 if opts.container == "" { 38 return fmt.Errorf("Container name cannot be empty") 39 } 40 ctx := context.Background() 41 42 changes, err := dockerCli.Client().ContainerDiff(ctx, opts.container) 43 if err != nil { 44 return err 45 } 46 47 for _, change := range changes { 48 var kind string 49 switch change.Kind { 50 case archive.ChangeModify: 51 kind = "C" 52 case archive.ChangeAdd: 53 kind = "A" 54 case archive.ChangeDelete: 55 kind = "D" 56 } 57 fmt.Fprintf(dockerCli.Out(), "%s %s\n", kind, change.Path) 58 } 59 60 return nil 61 }