diff options
author | Tianon Gravi <admwiggin@gmail.com> | 2023-03-30 14:43:41 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-30 14:43:41 -0700 |
commit | f537ef5746e1e6efac9613422c75836b70d68837 (patch) | |
tree | ab90013a551558e304aeb3591a7d3b3495128c5e /api | |
parent | 0656059ae7ab1d0b14afd3bd5f4533f2f2083ff0 (diff) | |
parent | a75354c04560d0e2b7a8469dae7743033d77ed8a (diff) | |
download | docker-f537ef5746e1e6efac9613422c75836b70d68837.tar.gz |
Merge pull request #44963 from vvoland/c8d-push-upstream
c8d: Implement push
Diffstat (limited to 'api')
-rw-r--r-- | api/server/router/image/backend.go | 2 | ||||
-rw-r--r-- | api/server/router/image/image_routes.go | 20 |
2 files changed, 20 insertions, 2 deletions
diff --git a/api/server/router/image/backend.go b/api/server/router/image/backend.go index 302b48d68e..f7cacba90f 100644 --- a/api/server/router/image/backend.go +++ b/api/server/router/image/backend.go @@ -38,7 +38,7 @@ type importExportBackend interface { type registryBackend interface { PullImage(ctx context.Context, image, tag string, platform *specs.Platform, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error - PushImage(ctx context.Context, image, tag string, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error + PushImage(ctx context.Context, ref reference.Named, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error } type Searcher interface { diff --git a/api/server/router/image/image_routes.go b/api/server/router/image/image_routes.go index d891b8158e..e39e59e3bb 100644 --- a/api/server/router/image/image_routes.go +++ b/api/server/router/image/image_routes.go @@ -154,7 +154,25 @@ func (ir *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter img := vars["name"] tag := r.Form.Get("tag") - if err := ir.backend.PushImage(ctx, img, tag, metaHeaders, authConfig, output); err != nil { + + var ref reference.Named + + // Tag is empty only in case ImagePushOptions.All is true. + if tag != "" { + r, err := httputils.RepoTagReference(img, tag) + if err != nil { + return errdefs.InvalidParameter(err) + } + ref = r + } else { + r, err := reference.ParseNormalizedNamed(img) + if err != nil { + return errdefs.InvalidParameter(err) + } + ref = r + } + + if err := ir.backend.PushImage(ctx, ref, metaHeaders, authConfig, output); err != nil { if !output.Flushed() { return err } |