From d1a352b372ca594fe1aad917cd3e11b1e6dbde7a Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Wed, 23 Jul 2014 23:22:06 -0700 Subject: [PATCH 1/4] Add dumb Commit() --- dockerclient.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dockerclient.go b/dockerclient.go index 89283a4..4f83a90 100644 --- a/dockerclient.go +++ b/dockerclient.go @@ -228,3 +228,19 @@ func (client *DockerClient) ListImages() ([]*Image, error) { return images, nil } + +func (client *DockerClient) Commit(cid string) (string, error) { + v := url.Values{} + v.Set("container", cid) + data, err := client.doRequest("POST", "/v1.10/commit?"+v.Encode(), nil) + if err != nil { + return "", err + } + + var img Image + if err := json.Unmarshal(data, &img); err != nil { + return "", err + } + + return img.Id, nil +} From fd77cc8e5b7b16e513c3e04cc842b35006038fb1 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Wed, 23 Jul 2014 23:33:27 -0700 Subject: [PATCH 2/4] commit: add empty config --- dockerclient.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dockerclient.go b/dockerclient.go index 4f83a90..59080d2 100644 --- a/dockerclient.go +++ b/dockerclient.go @@ -232,7 +232,11 @@ func (client *DockerClient) ListImages() ([]*Image, error) { func (client *DockerClient) Commit(cid string) (string, error) { v := url.Values{} v.Set("container", cid) - data, err := client.doRequest("POST", "/v1.10/commit?"+v.Encode(), nil) + config, err := json.Marshal(&HostConfig{}) + if err != nil { + return "", err + } + data, err := client.doRequest("POST", "/v1.10/commit?"+v.Encode(), config) if err != nil { return "", err } From 3cd004832b07a754bd4e5e43417a31214a33eb70 Mon Sep 17 00:00:00 2001 From: Flavio Castelli Date: Tue, 4 Aug 2015 17:36:28 +0200 Subject: [PATCH 3/4] Implement the commit API --- dockerclient.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/dockerclient.go b/dockerclient.go index 45ec581..f79bc53 100644 --- a/dockerclient.go +++ b/dockerclient.go @@ -693,14 +693,21 @@ func (client *DockerClient) BuildImage(image *BuildImage) (io.ReadCloser, error) return client.doStreamRequest("POST", uri, image.Context, headers) } -func (client *DockerClient) Commit(cid string) (string, error) { - v := url.Values{} - v.Set("container", cid) - config, err := json.Marshal(&HostConfig{}) +func (client *DockerClient) Commit(id string, c *ContainerConfig, repo, tag, comment, author string) (string, error) { + config, err := json.Marshal(c) if err != nil { return "", err } - data, err := client.doRequest("POST", "/v1.10/commit?"+v.Encode(), config) + + v := url.Values{} + v.Set("container", id) + v.Set("repo", repo) + v.Set("tag", tag) + v.Set("comment", comment) + v.Set("author", author) + + uri := fmt.Sprintf("/%s/commit?%s", APIVersion, v.Encode()) + data, err := client.doRequest("POST", uri, config, nil) if err != nil { return "", err } From ada8d5f70f76bb181c723046ae3c48049c38a047 Mon Sep 17 00:00:00 2001 From: Flavio Castelli Date: Wed, 5 Aug 2015 11:50:56 +0200 Subject: [PATCH 4/4] Tests: cover the Commit API --- interface.go | 1 + mockclient/mock.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/interface.go b/interface.go index 17f0641..73f4891 100644 --- a/interface.go +++ b/interface.go @@ -42,4 +42,5 @@ type Client interface { RenameContainer(oldName string, newName string) error ImportImage(source string, repository string, tag string, tar io.Reader) (io.ReadCloser, error) BuildImage(image *BuildImage) (io.ReadCloser, error) + Commit(id string, c *ContainerConfig, repo, tag, comment, author string) (string, error) } diff --git a/mockclient/mock.go b/mockclient/mock.go index 6babeea..186a0fa 100644 --- a/mockclient/mock.go +++ b/mockclient/mock.go @@ -155,3 +155,8 @@ func (client *MockClient) BuildImage(image *dockerclient.BuildImage) (io.ReadClo args := client.Mock.Called(image) return args.Get(0).(io.ReadCloser), args.Error(1) } + +func (client *MockClient) Commit(id string, c *ContainerConfig, repo, tag, comment, author string) (string, error) { + args := client.Mock.Called(id, c, repo, tag, comment, author) + return args.Strings(0), args.Error(1) +}