diff --git a/components/engine/api/server/router/image/backend.go b/components/engine/api/server/router/image/backend.go index dcf554cef3..ffbc9c181a 100644 --- a/components/engine/api/server/router/image/backend.go +++ b/components/engine/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) } diff --git a/components/engine/api/server/router/image/image_routes.go b/components/engine/api/server/router/image/image_routes.go index 618ccdf0d8..9358a52231 100644 --- a/components/engine/api/server/router/image/image_routes.go +++ b/components/engine/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) diff --git a/components/engine/daemon/commit.go b/components/engine/daemon/commit.go index 5f2e3c689d..8865d832f3 100644 --- a/components/engine/daemon/commit.go +++ b/components/engine/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 { diff --git a/components/engine/daemon/image_tag.go b/components/engine/daemon/image_tag.go index 80abd9f158..56b325f66d 100644 --- a/components/engine/daemon/image_tag.go +++ b/components/engine/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.