diff options
author | W. Trevor King <wking@tremily.us> | 2019-01-08 21:46:20 -0800 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2019-01-09 22:29:18 +0000 |
commit | 0f6535cf6b4bfac265983c2fdd3482310ab4f39b (patch) | |
tree | 16bc07796a80a1ab567a86d089ebc08f5ea8366c /libpod/image/image.go | |
parent | a60090cfba3674c5c1223b270c5f46600e6ee07e (diff) | |
download | podman-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.go | 18 |
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 |