diff --git a/pkg/api/handlers/compat/images.go b/pkg/api/handlers/compat/images.go index a7e2701cb1dc..a50b8e9846c5 100644 --- a/pkg/api/handlers/compat/images.go +++ b/pkg/api/handlers/compat/images.go @@ -45,6 +45,18 @@ func mergeNameAndTagOrDigest(name, tagOrDigest string) string { // We have a digest, so let's change the separator. separator = "@" } + + // if both name and tagOrDigest are defined we try to use the tagOrDigest image part and override the tag/digest + if len(name) > 0 && strings.Contains(name, separator) { + index := strings.LastIndex(name, separator) + return fmt.Sprintf("%s%s%s", name[:index], separator, tagOrDigest) + } + + + if len(name) > 0 && len(tagOrDigest) > 0 && strings.Contains(name, separator) { + parts := strings.Split(name, separator) + return fmt.Sprintf("%s%s%s", strings.Join(parts[:len(parts)-1], ""), separator, tagOrDigest) + } return fmt.Sprintf("%s%s%s", name, separator, tagOrDigest) } diff --git a/test/apiv2/10-images.at b/test/apiv2/10-images.at index 375a9f984e2e..27ca2e509a9d 100644 --- a/test/apiv2/10-images.at +++ b/test/apiv2/10-images.at @@ -112,6 +112,9 @@ fi t POST "/images/create?fromImage=quay.io/idonotexist/idonotexist:dummy" $expect_code \ .message="$expect_msg" +# compat api pull image with fromImage and Tag +t GET "/images/create?fromImage=alpine:latest&tag=latest" 200 .error~null .status~".*Download complete.*" + # Export an image on the local t GET libpod/images/nonesuch/get 404 t GET libpod/images/$iid/get?format=foo 500