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

Use TagImage in Commit

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Daniel Nephin 7 лет назад
Родитель
Сommit
afb3eda697

+ 1 - 1
api/server/router/image/backend.go

@@ -29,7 +29,7 @@ type imageBackend interface {
 	ImageHistory(imageName string) ([]*image.HistoryResponseItem, error)
 	Images(imageFilters filters.Args, all bool, withExtraAttrs bool) ([]*types.ImageSummary, error)
 	LookupImage(name string) (*types.ImageInspect, error)
-	TagImage(imageName, repository, tag string) error
+	TagImage(imageName, repository, tag string) (string, error)
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
 }
 

+ 1 - 1
api/server/router/image/image_routes.go

@@ -303,7 +303,7 @@ func (s *imageRouter) postImagesTag(ctx context.Context, w http.ResponseWriter,
 	if err := httputils.ParseForm(r); err != nil {
 		return err
 	}
-	if err := s.backend.TagImage(vars["name"], r.Form.Get("repo"), r.Form.Get("tag")); err != nil {
+	if _, err := s.backend.TagImage(vars["name"], r.Form.Get("repo"), r.Form.Get("tag")); err != nil {
 		return err
 	}
 	w.WriteHeader(http.StatusCreated)

+ 6 - 28
daemon/commit.go

@@ -8,7 +8,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/docker/distribution/reference"
 	"github.com/docker/docker/api/types/backend"
 	containertypes "github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/builder/dockerfile"
@@ -176,9 +175,12 @@ func (daemon *Daemon) CreateImageFromContainer(name string, c *backend.CreateIma
 		return "", err
 	}
 
-	imageRef, err := daemon.tagCommit(c.Repo, c.Tag, id)
-	if err != nil {
-		return "", err
+	var imageRef string
+	if c.Repo != "" {
+		imageRef, err = daemon.TagImage(string(id), c.Repo, c.Tag)
+		if err != nil {
+			return "", err
+		}
 	}
 	daemon.LogContainerEventWithAttributes(container, "commit", map[string]string{
 		"comment":  c.Comment,
@@ -247,30 +249,6 @@ func (daemon *Daemon) commitImage(c backend.CommitConfig) (image.ID, error) {
 	return id, nil
 }
 
-// TODO: remove from Daemon, move to api backend
-func (daemon *Daemon) tagCommit(repo string, tag string, id image.ID) (string, error) {
-	imageRef := ""
-	if repo != "" {
-		newTag, err := reference.ParseNormalizedNamed(repo) // todo: should move this to API layer
-		if err != nil {
-			return "", err
-		}
-		if !reference.IsNameOnly(newTag) {
-			return "", errors.Errorf("unexpected repository name: %s", repo)
-		}
-		if tag != "" {
-			if newTag, err = reference.WithTag(newTag, tag); err != nil {
-				return "", err
-			}
-		}
-		if err := daemon.TagImageWithReference(id, newTag); err != nil {
-			return "", err
-		}
-		imageRef = reference.FamiliarString(newTag)
-	}
-	return imageRef, nil
-}
-
 func exportContainerRw(layerStore layer.Store, id, mountLabel string) (arch io.ReadCloser, err error) {
 	rwlayer, err := layerStore.GetRWLayer(id)
 	if err != nil {

+ 6 - 5
daemon/image_tag.go

@@ -7,23 +7,24 @@ import (
 
 // TagImage creates the tag specified by newTag, pointing to the image named
 // imageName (alternatively, imageName can also be an image ID).
-func (daemon *Daemon) TagImage(imageName, repository, tag string) error {
+func (daemon *Daemon) TagImage(imageName, repository, tag string) (string, error) {
 	imageID, _, err := daemon.GetImageIDAndOS(imageName)
 	if err != nil {
-		return err
+		return "", err
 	}
 
 	newTag, err := reference.ParseNormalizedNamed(repository)
 	if err != nil {
-		return err
+		return "", err
 	}
 	if tag != "" {
 		if newTag, err = reference.WithTag(reference.TrimNamed(newTag), tag); err != nil {
-			return err
+			return "", err
 		}
 	}
 
-	return daemon.TagImageWithReference(imageID, newTag)
+	err = daemon.TagImageWithReference(imageID, newTag)
+	return reference.FamiliarString(newTag), err
 }
 
 // TagImageWithReference adds the given reference to the image ID provided.