Browse code

Implement docker diff with standalone client lib.

Signed-off-by: David Calavera <david.calavera@gmail.com>

David Calavera authored on 2015/12/04 04:18:35
Showing 2 changed files
... ...
@@ -1,10 +1,8 @@
1 1
 package client
2 2
 
3 3
 import (
4
-	"encoding/json"
5 4
 	"fmt"
6 5
 
7
-	"github.com/docker/docker/api/types"
8 6
 	Cli "github.com/docker/docker/cli"
9 7
 	"github.com/docker/docker/pkg/archive"
10 8
 	flag "github.com/docker/docker/pkg/mflag"
... ...
@@ -27,18 +25,11 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
27 27
 		return fmt.Errorf("Container name cannot be empty")
28 28
 	}
29 29
 
30
-	serverResp, err := cli.call("GET", "/containers/"+cmd.Arg(0)+"/changes", nil, nil)
30
+	changes, err := cli.client.ContainerDiff(cmd.Arg(0))
31 31
 	if err != nil {
32 32
 		return err
33 33
 	}
34 34
 
35
-	defer serverResp.body.Close()
36
-
37
-	changes := []types.ContainerChange{}
38
-	if err := json.NewDecoder(serverResp.body).Decode(&changes); err != nil {
39
-		return err
40
-	}
41
-
42 35
 	for _, change := range changes {
43 36
 		var kind string
44 37
 		switch change.Kind {
45 38
new file mode 100644
... ...
@@ -0,0 +1,25 @@
0
+package lib
1
+
2
+import (
3
+	"encoding/json"
4
+	"net/url"
5
+
6
+	"github.com/docker/docker/api/types"
7
+)
8
+
9
+// ContainerDiff shows differences in a container filesystem since it was started.
10
+func (cli *Client) ContainerDiff(containerID string) ([]types.ContainerChange, error) {
11
+	var changes []types.ContainerChange
12
+
13
+	serverResp, err := cli.GET("/containers/"+containerID+"/changes", url.Values{}, nil)
14
+	if err != nil {
15
+		return changes, err
16
+	}
17
+	defer serverResp.body.Close()
18
+
19
+	if err := json.NewDecoder(serverResp.body).Decode(&changes); err != nil {
20
+		return changes, err
21
+	}
22
+
23
+	return changes, nil
24
+}