diff options
Diffstat (limited to 'libpod/image/parts.go')
-rw-r--r-- | libpod/image/parts.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libpod/image/parts.go b/libpod/image/parts.go new file mode 100644 index 000000000..e4ae489f9 --- /dev/null +++ b/libpod/image/parts.go @@ -0,0 +1,56 @@ +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, + }, 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) +} |