summaryrefslogtreecommitdiff
path: root/libpod/image/image.go
diff options
context:
space:
mode:
authorW. Trevor King <wking@tremily.us>2019-01-08 21:46:20 -0800
committerAtomic Bot <atomic-devel@projectatomic.io>2019-01-09 22:29:18 +0000
commit0f6535cf6b4bfac265983c2fdd3482310ab4f39b (patch)
tree16bc07796a80a1ab567a86d089ebc08f5ea8366c /libpod/image/image.go
parenta60090cfba3674c5c1223b270c5f46600e6ee07e (diff)
downloadpodman-0f6535cf6b4bfac265983c2fdd3482310ab4f39b.tar.gz
podman-0f6535cf6b4bfac265983c2fdd3482310ab4f39b.tar.bz2
podman-0f6535cf6b4bfac265983c2fdd3482310ab4f39b.zip
libpod/image: Use ParseNormalizedNamed in RepoDigests
Avoid generating quay.io/openshift-release-dev/ocp-release@sha256@sha256:239... and similar when the image name is already digest-based [1]. It's not clear exactly how we get into this state, but as shown by the unit tests, the new code handles this case correctly (while the previous code does not). [1]: https://github.com/containers/libpod/issues/2086 Signed-off-by: W. Trevor King <wking@tremily.us> Closes: #2106 Approved by: rhatdan
Diffstat (limited to 'libpod/image/image.go')
-rw-r--r--libpod/image/image.go18
1 files changed, 15 insertions, 3 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go
index 3a6d0e305..2e12adb70 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -305,12 +305,24 @@ func (i *Image) Names() []string {
}
// RepoDigests returns a string array of repodigests associated with the image
-func (i *Image) RepoDigests() []string {
+func (i *Image) RepoDigests() ([]string, error) {
var repoDigests []string
+ digest := i.Digest()
+
for _, name := range i.Names() {
- repoDigests = append(repoDigests, strings.SplitN(name, ":", 2)[0]+"@"+i.Digest().String())
+ named, err := reference.ParseNormalizedNamed(name)
+ if err != nil {
+ return nil, err
+ }
+
+ canonical, err := reference.WithDigest(reference.TrimNamed(named), digest)
+ if err != nil {
+ return nil, err
+ }
+
+ repoDigests = append(repoDigests, canonical.String())
}
- return repoDigests
+ return repoDigests, nil
}
// Created returns the time the image was created