daemon/imageService: Remove TagImageWithReference
TagImage is just a wrapper for TagImageWithReference which parses the repo and tag into a reference. Change TagImageWithReference into TagImage and move the responsibility of reference parsing to caller. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
7b6f71dced
commit
1ca85e835c
8 changed files with 55 additions and 35 deletions
api/server
daemon
|
@ -21,7 +21,7 @@ import (
|
|||
// ImageComponent provides an interface for working with images
|
||||
type ImageComponent interface {
|
||||
SquashImage(from string, to string) (string, error)
|
||||
TagImageWithReference(context.Context, image.ID, reference.Named) error
|
||||
TagImage(context.Context, image.ID, reference.Named) error
|
||||
}
|
||||
|
||||
// Builder defines interface for running a build
|
||||
|
|
|
@ -13,7 +13,7 @@ import (
|
|||
// tagImages creates image tags for the imageID.
|
||||
func tagImages(ctx context.Context, ic ImageComponent, stdout io.Writer, imageID image.ID, repoAndTags []reference.Named) error {
|
||||
for _, rt := range repoAndTags {
|
||||
if err := ic.TagImageWithReference(ctx, imageID, rt); err != nil {
|
||||
if err := ic.TagImage(ctx, imageID, rt); err != nil {
|
||||
return err
|
||||
}
|
||||
_, _ = fmt.Fprintln(stdout, "Successfully tagged", reference.FamiliarString(rt))
|
||||
|
|
|
@ -26,7 +26,7 @@ type imageBackend interface {
|
|||
ImageHistory(ctx context.Context, imageName string) ([]*image.HistoryResponseItem, error)
|
||||
Images(ctx context.Context, opts types.ImageListOptions) ([]*types.ImageSummary, error)
|
||||
GetImage(ctx context.Context, refOrID string, options image.GetImageOpts) (*dockerimage.Image, error)
|
||||
TagImage(ctx context.Context, imageName, repository, tag string) (string, error)
|
||||
TagImage(ctx context.Context, id dockerimage.ID, newRef reference.Named) error
|
||||
ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
|
||||
}
|
||||
|
||||
|
|
|
@ -369,7 +369,29 @@ func (ir *imageRouter) postImagesTag(ctx context.Context, w http.ResponseWriter,
|
|||
if err := httputils.ParseForm(r); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := ir.backend.TagImage(ctx, vars["name"], r.Form.Get("repo"), r.Form.Get("tag")); err != nil {
|
||||
|
||||
repo := r.Form.Get("repo")
|
||||
tag := r.Form.Get("tag")
|
||||
|
||||
ref, err := reference.ParseNormalizedNamed(repo)
|
||||
if err != nil {
|
||||
return errdefs.InvalidParameter(err)
|
||||
}
|
||||
|
||||
if tag != "" {
|
||||
if ref, err = reference.WithTag(reference.TrimNamed(ref), tag); err != nil {
|
||||
return errdefs.InvalidParameter(err)
|
||||
}
|
||||
} else {
|
||||
ref = reference.TagNameOnly(ref)
|
||||
}
|
||||
|
||||
img, err := ir.backend.GetImage(ctx, vars["name"], opts.GetImageOpts{})
|
||||
if err != nil {
|
||||
return errdefs.NotFound(err)
|
||||
}
|
||||
|
||||
if err := ir.backend.TagImage(ctx, img.ID(), ref); err != nil {
|
||||
return err
|
||||
}
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
|
|
|
@ -7,6 +7,7 @@ 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"
|
||||
|
@ -119,6 +120,26 @@ func merge(userConf, imageConf *containertypes.Config) error {
|
|||
// applying that config over the existing container config.
|
||||
func (daemon *Daemon) CreateImageFromContainer(ctx context.Context, name string, c *backend.CreateImageConfig) (string, error) {
|
||||
start := time.Now()
|
||||
|
||||
var newRef reference.Named
|
||||
if c.Repo != "" {
|
||||
ref, err := reference.ParseNormalizedNamed(c.Repo)
|
||||
if err != nil {
|
||||
return "", errdefs.InvalidParameter(err)
|
||||
}
|
||||
|
||||
if c.Tag != "" {
|
||||
ref, err = reference.WithTag(ref, c.Tag)
|
||||
if err != nil {
|
||||
return "", errdefs.InvalidParameter(err)
|
||||
}
|
||||
} else {
|
||||
ref = reference.TagNameOnly(ref)
|
||||
}
|
||||
|
||||
newRef = ref
|
||||
}
|
||||
|
||||
container, err := daemon.GetContainer(name)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
@ -169,12 +190,13 @@ func (daemon *Daemon) CreateImageFromContainer(ctx context.Context, name string,
|
|||
return "", err
|
||||
}
|
||||
|
||||
var imageRef string
|
||||
if c.Repo != "" {
|
||||
imageRef, err = daemon.imageService.TagImage(ctx, string(id), c.Repo, c.Tag)
|
||||
imageRef := ""
|
||||
if newRef != nil {
|
||||
err = daemon.imageService.TagImage(ctx, id, newRef)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
imageRef = reference.FamiliarString(newRef)
|
||||
}
|
||||
daemon.LogContainerEventWithAttributes(container, "commit", map[string]string{
|
||||
"comment": c.Comment,
|
||||
|
|
|
@ -37,8 +37,7 @@ type ImageService interface {
|
|||
CountImages() int
|
||||
ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
|
||||
ImportImage(ctx context.Context, ref reference.Named, platform *v1.Platform, msg string, layerReader io.Reader, changes []string) (image.ID, error)
|
||||
TagImage(ctx context.Context, imageName, repository, tag string) (string, error)
|
||||
TagImageWithReference(ctx context.Context, imageID image.ID, newTag reference.Named) error
|
||||
TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error
|
||||
GetImage(ctx context.Context, refOrID string, options imagetype.GetImageOpts) (*image.Image, error)
|
||||
ImageHistory(ctx context.Context, name string) ([]*imagetype.HistoryResponseItem, error)
|
||||
CommitImage(ctx context.Context, c backend.CommitConfig) (image.ID, error)
|
||||
|
|
|
@ -80,7 +80,7 @@ func (i *ImageService) ImportImage(ctx context.Context, newRef reference.Named,
|
|||
}
|
||||
|
||||
if newRef != nil {
|
||||
if err := i.TagImageWithReference(ctx, id, newRef); err != nil {
|
||||
if err := i.TagImage(ctx, id, newRef); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,34 +4,11 @@ import (
|
|||
"context"
|
||||
|
||||
"github.com/docker/distribution/reference"
|
||||
imagetypes "github.com/docker/docker/api/types/image"
|
||||
"github.com/docker/docker/image"
|
||||
)
|
||||
|
||||
// TagImage creates the tag specified by newTag, pointing to the image named
|
||||
// imageName (alternatively, imageName can also be an image ID).
|
||||
func (i *ImageService) TagImage(ctx context.Context, imageName, repository, tag string) (string, error) {
|
||||
img, err := i.GetImage(ctx, imageName, imagetypes.GetImageOpts{})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
newTag, err := reference.ParseNormalizedNamed(repository)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if tag != "" {
|
||||
if newTag, err = reference.WithTag(reference.TrimNamed(newTag), tag); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
err = i.TagImageWithReference(ctx, img.ID(), newTag)
|
||||
return reference.FamiliarString(newTag), err
|
||||
}
|
||||
|
||||
// TagImageWithReference adds the given reference to the image ID provided.
|
||||
func (i *ImageService) TagImageWithReference(ctx context.Context, imageID image.ID, newTag reference.Named) error {
|
||||
// TagImage adds the given reference to the image ID provided.
|
||||
func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag reference.Named) error {
|
||||
if err := i.referenceStore.AddTag(newTag, imageID.Digest(), true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue