Browse code

Implement docker tag with standalone client lib.

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

David Calavera authored on 2015/12/05 03:45:51
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,25 @@
0
+package lib
1
+
2
+import "net/url"
3
+
4
+// ImageTagOptions hold parameters to tag an image
5
+type ImageTagOptions struct {
6
+	ImageID        string
7
+	RepositoryName string
8
+	Tag            string
9
+	Force          bool
10
+}
11
+
12
+// ImageTag tags an image in the docker host
13
+func (cli *Client) ImageTag(options types.ImageTagOptions) error {
14
+	query := url.Values{}
15
+	query.Set("repo", options.RepositoryName)
16
+	query.Set("tag", options.Tag)
17
+	if options.Force {
18
+		query.Set("force", "1")
19
+	}
20
+
21
+	resp, err := cli.POST("/images/"+options.ImageID+"/tag", query, nil, nil)
22
+	ensureReaderClosed(resp)
23
+	return err
24
+}
... ...
@@ -2,9 +2,9 @@ package client
2 2
 
3 3
 import (
4 4
 	"errors"
5
-	"net/url"
6 5
 
7 6
 	"github.com/docker/distribution/reference"
7
+	"github.com/docker/docker/api/client/lib"
8 8
 	Cli "github.com/docker/docker/cli"
9 9
 	flag "github.com/docker/docker/pkg/mflag"
10 10
 	"github.com/docker/docker/registry"
... ...
@@ -20,7 +20,6 @@ func (cli *DockerCli) CmdTag(args ...string) error {
20 20
 
21 21
 	cmd.ParseFlags(args, true)
22 22
 
23
-	v := url.Values{}
24 23
 	ref, err := reference.ParseNamed(cmd.Arg(1))
25 24
 	if err != nil {
26 25
 		return err
... ...
@@ -41,15 +40,13 @@ func (cli *DockerCli) CmdTag(args ...string) error {
41 41
 	if err := registry.ValidateRepositoryName(ref); err != nil {
42 42
 		return err
43 43
 	}
44
-	v.Set("repo", ref.Name())
45
-	v.Set("tag", tag)
46 44
 
47
-	if *force {
48
-		v.Set("force", "1")
45
+	options := lib.ImageTagOptions{
46
+		ImageID:        cmd.Arg(0),
47
+		RepositoryName: ref.Name(),
48
+		Tag:            tag,
49
+		Force:          *force,
49 50
 	}
50 51
 
51
-	if _, _, err := readBody(cli.call("POST", "/images/"+cmd.Arg(0)+"/tag?"+v.Encode(), nil, nil)); err != nil {
52
-		return err
53
-	}
54
-	return nil
52
+	return cli.client.ImageTag(options)
55 53
 }