Просмотр исходного кода

Merge pull request #18350 from duglin/Issue9798a

Deprecate -f flag from docker tag
Jess Frazelle 9 лет назад
Родитель
Сommit
fcccf2dae4

+ 1 - 1
api/client/tag.go

@@ -15,7 +15,7 @@ import (
 // Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
 // Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
 func (cli *DockerCli) CmdTag(args ...string) error {
 func (cli *DockerCli) CmdTag(args ...string) error {
 	cmd := Cli.Subcmd("tag", []string{"IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]"}, Cli.DockerCommands["tag"].Description, true)
 	cmd := Cli.Subcmd("tag", []string{"IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]"}, Cli.DockerCommands["tag"].Description, true)
-	force := cmd.Bool([]string{"f", "-force"}, false, "Force the tagging even if there's a conflict")
+	force := cmd.Bool([]string{"#f", "#-force"}, false, "Force the tagging even if there's a conflict")
 	cmd.Require(flag.Exact, 2)
 	cmd.Require(flag.Exact, 2)
 
 
 	cmd.ParseFlags(args, true)
 	cmd.ParseFlags(args, true)

+ 2 - 3
api/server/router/local/image.go

@@ -470,7 +470,7 @@ func (s *router) postBuild(ctx context.Context, w http.ResponseWriter, r *http.R
 	}
 	}
 
 
 	for _, rt := range repoAndTags {
 	for _, rt := range repoAndTags {
-		if err := s.daemon.TagImage(rt, imgID, true); err != nil {
+		if err := s.daemon.TagImage(rt, imgID); err != nil {
 			return errf(err)
 			return errf(err)
 		}
 		}
 	}
 	}
@@ -554,8 +554,7 @@ func (s *router) postImagesTag(ctx context.Context, w http.ResponseWriter, r *ht
 			return err
 			return err
 		}
 		}
 	}
 	}
-	force := httputils.BoolValue(r, "force")
-	if err := s.daemon.TagImage(newTag, vars["name"], force); err != nil {
+	if err := s.daemon.TagImage(newTag, vars["name"]); err != nil {
 		return err
 		return err
 	}
 	}
 	w.WriteHeader(http.StatusCreated)
 	w.WriteHeader(http.StatusCreated)

+ 1 - 1
daemon/commit.go

@@ -136,7 +136,7 @@ func (daemon *Daemon) Commit(name string, c *ContainerCommitConfig) (string, err
 				return "", err
 				return "", err
 			}
 			}
 		}
 		}
-		if err := daemon.TagImage(newTag, id.String(), true); err != nil {
+		if err := daemon.TagImage(newTag, id.String()); err != nil {
 			return "", err
 			return "", err
 		}
 		}
 	}
 	}

+ 3 - 4
daemon/daemon.go

@@ -1017,15 +1017,14 @@ func (daemon *Daemon) changes(container *Container) ([]archive.Change, error) {
 }
 }
 
 
 // TagImage creates a tag in the repository reponame, pointing to the image named
 // TagImage creates a tag in the repository reponame, pointing to the image named
-// imageName. If force is true, an existing tag with the same name may be
-// overwritten.
-func (daemon *Daemon) TagImage(newTag reference.Named, imageName string, force bool) error {
+// imageName.
+func (daemon *Daemon) TagImage(newTag reference.Named, imageName string) error {
 	imageID, err := daemon.GetImageID(imageName)
 	imageID, err := daemon.GetImageID(imageName)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
 	newTag = registry.NormalizeLocalReference(newTag)
 	newTag = registry.NormalizeLocalReference(newTag)
-	if err := daemon.tagStore.AddTag(newTag, imageID, force); err != nil {
+	if err := daemon.tagStore.AddTag(newTag, imageID, true); err != nil {
 		return err
 		return err
 	}
 	}
 	daemon.EventsService.Log("tag", newTag.String(), "")
 	daemon.EventsService.Log("tag", newTag.String(), "")

+ 1 - 1
daemon/import.go

@@ -100,7 +100,7 @@ func (daemon *Daemon) ImportImage(src string, newRef reference.Named, msg string
 
 
 	// FIXME: connect with commit code and call tagstore directly
 	// FIXME: connect with commit code and call tagstore directly
 	if newRef != nil {
 	if newRef != nil {
-		if err := daemon.TagImage(newRef, id.String(), true); err != nil {
+		if err := daemon.TagImage(newRef, id.String()); err != nil {
 			return err
 			return err
 		}
 		}
 	}
 	}

+ 7 - 0
docs/misc/deprecated.md

@@ -12,6 +12,13 @@ parent = "mn_use_docker"
 
 
 The following list of features are deprecated.
 The following list of features are deprecated.
 
 
+### `-f` flag on `docker tag`
+**Deprecated In Release: v1.10**
+
+**Target For Removal In Release: v1.12**
+
+To make tagging consistent across the various `docker` commands, the `-f` flag on the `docker tag` command is deprecated. It is not longer necessary to specify `-f` to move a tag from one image to another. Nor will `docker` generate an error if the `-f` flag is missing and the specified tag is already in use.
+
 ### HostConfig at API container start
 ### HostConfig at API container start
 **Deprecated In Release: v1.10**
 **Deprecated In Release: v1.10**
 
 

+ 0 - 1
docs/reference/commandline/tag.md

@@ -14,7 +14,6 @@ parent = "smn_cli"
 
 
     Tag an image into a repository
     Tag an image into a repository
 
 
-      -f, --force=false    Force the tagging even if there's a conflict
       --help=false         Print usage
       --help=false         Print usage
 
 
 You can group your images together using names and tags, and then upload them
 You can group your images together using names and tags, and then upload them

+ 6 - 10
integration-cli/docker_cli_tag_test.go

@@ -69,7 +69,7 @@ func (s *DockerSuite) TestTagValidPrefixedRepo(c *check.C) {
 	}
 	}
 }
 }
 
 
-// tag an image with an existed tag name without -f option should fail
+// tag an image with an existed tag name without -f option should work
 func (s *DockerSuite) TestTagExistedNameWithoutForce(c *check.C) {
 func (s *DockerSuite) TestTagExistedNameWithoutForce(c *check.C) {
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	if err := pullImageIfNotExist("busybox:latest"); err != nil {
 	if err := pullImageIfNotExist("busybox:latest"); err != nil {
@@ -77,10 +77,6 @@ func (s *DockerSuite) TestTagExistedNameWithoutForce(c *check.C) {
 	}
 	}
 
 
 	dockerCmd(c, "tag", "busybox:latest", "busybox:test")
 	dockerCmd(c, "tag", "busybox:latest", "busybox:test")
-	out, _, err := dockerCmdWithError("tag", "busybox:latest", "busybox:test")
-
-	c.Assert(err, checker.NotNil, check.Commentf(out))
-	c.Assert(out, checker.Contains, "Conflict: Tag busybox:test is already set to image", check.Commentf("tag busybox busybox:test should have failed,because busybox:test is existed"))
 }
 }
 
 
 // tag an image with an existed tag name with -f option should work
 // tag an image with an existed tag name with -f option should work
@@ -129,7 +125,7 @@ func (s *DockerSuite) TestTagOfficialNames(c *check.C) {
 	}
 	}
 
 
 	for _, name := range names {
 	for _, name := range names {
-		out, exitCode, err := dockerCmdWithError("tag", "-f", "busybox:latest", name+":latest")
+		out, exitCode, err := dockerCmdWithError("tag", "busybox:latest", name+":latest")
 		if err != nil || exitCode != 0 {
 		if err != nil || exitCode != 0 {
 			c.Errorf("tag busybox %v should have worked: %s, %s", name, err, out)
 			c.Errorf("tag busybox %v should have worked: %s, %s", name, err, out)
 			continue
 			continue
@@ -146,7 +142,7 @@ func (s *DockerSuite) TestTagOfficialNames(c *check.C) {
 	}
 	}
 
 
 	for _, name := range names {
 	for _, name := range names {
-		_, exitCode, err := dockerCmdWithError("tag", "-f", name+":latest", "fooo/bar:latest")
+		_, exitCode, err := dockerCmdWithError("tag", name+":latest", "fooo/bar:latest")
 		if err != nil || exitCode != 0 {
 		if err != nil || exitCode != 0 {
 			c.Errorf("tag %v fooo/bar should have worked: %s", name, err)
 			c.Errorf("tag %v fooo/bar should have worked: %s", name, err)
 			continue
 			continue
@@ -163,7 +159,7 @@ func (s *DockerSuite) TestTagMatchesDigest(c *check.C) {
 	}
 	}
 	digest := "busybox@sha256:abcdef76720241213f5303bda7704ec4c2ef75613173910a56fb1b6e20251507"
 	digest := "busybox@sha256:abcdef76720241213f5303bda7704ec4c2ef75613173910a56fb1b6e20251507"
 	// test setting tag fails
 	// test setting tag fails
-	_, _, err := dockerCmdWithError("tag", "-f", "busybox:latest", digest)
+	_, _, err := dockerCmdWithError("tag", "busybox:latest", digest)
 	if err == nil {
 	if err == nil {
 		c.Fatal("digest tag a name should have failed")
 		c.Fatal("digest tag a name should have failed")
 	}
 	}
@@ -181,7 +177,7 @@ func (s *DockerSuite) TestTagInvalidRepoName(c *check.C) {
 	}
 	}
 
 
 	// test setting tag fails
 	// test setting tag fails
-	_, _, err := dockerCmdWithError("tag", "-f", "busybox:latest", "sha256:sometag")
+	_, _, err := dockerCmdWithError("tag", "busybox:latest", "sha256:sometag")
 	if err == nil {
 	if err == nil {
 		c.Fatal("tagging with image named \"sha256\" should have failed")
 		c.Fatal("tagging with image named \"sha256\" should have failed")
 	}
 	}
@@ -214,7 +210,7 @@ func (s *DockerSuite) TestTagTruncationAmbiguity(c *check.C) {
 	c.Logf("Built image: %s", imageID)
 	c.Logf("Built image: %s", imageID)
 
 
 	// test setting tag fails
 	// test setting tag fails
-	_, _, err = dockerCmdWithError("tag", "-f", "busybox:latest", truncatedTag)
+	_, _, err = dockerCmdWithError("tag", "busybox:latest", truncatedTag)
 	if err != nil {
 	if err != nil {
 		c.Fatalf("Error tagging with an image id: %s", err)
 		c.Fatalf("Error tagging with an image id: %s", err)
 	}
 	}

+ 0 - 4
man/docker-tag.1.md

@@ -6,7 +6,6 @@ docker-tag - Tag an image into a repository
 
 
 # SYNOPSIS
 # SYNOPSIS
 **docker tag**
 **docker tag**
-[**-f**|**--force**[=*false*]]
 [**--help**]
 [**--help**]
 IMAGE[:TAG] [REGISTRY_HOST/][USERNAME/]NAME[:TAG]
 IMAGE[:TAG] [REGISTRY_HOST/][USERNAME/]NAME[:TAG]
 
 
@@ -18,9 +17,6 @@ If you do not specify a `REGISTRY_HOST`, the command uses Docker's public
 registry located at `registry-1.docker.io` by default. 
 registry located at `registry-1.docker.io` by default. 
 
 
 # "OPTIONS"
 # "OPTIONS"
-**-f**, **--force**=*true*|*false*
-   When set to true, force the alias. The default is *false*.
-
 **--help**
 **--help**
    Print usage statement.
    Print usage statement.