mirror of
https://github.com/containers/podman
synced 2024-10-22 02:03:38 +00:00
b85b217f55
This represents the stage3 implementation for the image library. At this point, we are moving the image-centric functions to pkg/image including migration of args and object-oriented references. This is a not a one-for-one migration of funcs and some funcs will need to continue to reside in runtime_img as they are overly specific to libpod and probably not useful to others. Signed-off-by: baude <bbaude@redhat.com> Closes: #484 Approved by: baude
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package image
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/containers/image/docker/reference"
|
|
)
|
|
|
|
// imageParts describes the parts of an image's name
|
|
type imageParts struct {
|
|
transport string
|
|
registry string
|
|
name string
|
|
tag string
|
|
isTagged bool
|
|
hasRegistry bool
|
|
}
|
|
|
|
// decompose breaks an input name into an imageParts description
|
|
func decompose(input string) (imageParts, error) {
|
|
var (
|
|
parts imageParts
|
|
hasRegistry bool
|
|
tag string
|
|
)
|
|
imgRef, err := reference.Parse(input)
|
|
if err != nil {
|
|
return parts, err
|
|
}
|
|
ntag, isTagged, err := getTags(input)
|
|
if err != nil {
|
|
return parts, err
|
|
}
|
|
if !isTagged {
|
|
tag = "latest"
|
|
} else {
|
|
tag = ntag.Tag()
|
|
}
|
|
registry := reference.Domain(imgRef.(reference.Named))
|
|
if registry != "" {
|
|
hasRegistry = true
|
|
}
|
|
imageName := reference.Path(imgRef.(reference.Named))
|
|
return imageParts{
|
|
registry: registry,
|
|
hasRegistry: hasRegistry,
|
|
name: imageName,
|
|
tag: tag,
|
|
isTagged: isTagged,
|
|
transport: DefaultTransport,
|
|
}, nil
|
|
}
|
|
|
|
// assemble concatenates an image's parts into a string
|
|
func (ip *imageParts) assemble() string {
|
|
return fmt.Sprintf("%s/%s:%s", ip.registry, ip.name, ip.tag)
|
|
}
|
|
|
|
// assemble concatenates an image's parts with transport into a string
|
|
func (ip *imageParts) assembleWithTransport() string {
|
|
return fmt.Sprintf("%s%s/%s:%s", ip.transport, ip.registry, ip.name, ip.tag)
|
|
}
|