mirror of https://github.com/containers/podman.git
Add imageParts.normalizedReference()
This will be used in normalizeTag to work with references instead of strings. Not used anywhere yet, should not change behavior. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
e58aa74766
commit
1c19d19c6e
|
@ -92,3 +92,17 @@ func (ip *imageParts) referenceWithRegistry(registry string) (reference.Named, e
|
|||
}
|
||||
return ref, nil
|
||||
}
|
||||
|
||||
// normalizedReference returns a (normalized) reference for ip (with ip.hasRegistry)
|
||||
func (ip *imageParts) normalizedReference() (reference.Named, error) {
|
||||
if !ip.hasRegistry {
|
||||
return nil, errors.Errorf("internal error: normalizedReference called on imageParts without a registry (%#v)", *ip)
|
||||
}
|
||||
// We need to round-trip via a string to get the right normalization of docker.io/library
|
||||
s := ip.unnormalizedRef.String()
|
||||
ref, err := reference.ParseNormalizedNamed(s)
|
||||
if err != nil { // Should never happen
|
||||
return nil, errors.Wrapf(err, "error normalizing qualified reference %#v", s)
|
||||
}
|
||||
return ref, nil
|
||||
}
|
||||
|
|
|
@ -93,3 +93,31 @@ func TestImagePartsReferenceWithRegistry(t *testing.T) {
|
|||
_, err = parts.referenceWithRegistry("invalid@domain")
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestImagePartsNormalizedReference(t *testing.T) {
|
||||
const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
|
||||
|
||||
for _, c := range []struct{ input, expected string }{
|
||||
{"busybox", ""}, // Unqualified input is invalid
|
||||
{"docker.io/busybox", "docker.io/library/busybox"}, // docker.io single-name
|
||||
{"example.com/busybox", "example.com/busybox"}, // example.com single-name
|
||||
{"docker.io/ns/busybox", "docker.io/ns/busybox"}, // docker.io namespaced
|
||||
{"example.com/ns/busybox", "example.com/ns/busybox"}, // example.com namespaced
|
||||
{"example.com/ns/busybox:notlatest", "example.com/ns/busybox:notlatest"}, // name:tag
|
||||
{"example.com/ns/busybox" + digestSuffix, "example.com/ns/busybox" + digestSuffix}, // name@digest
|
||||
{ // name:tag@digest
|
||||
"example.com/ns/busybox:notlatest" + digestSuffix, "example.com/ns/busybox:notlatest" + digestSuffix,
|
||||
},
|
||||
} {
|
||||
parts, err := decompose(c.input)
|
||||
require.NoError(t, err)
|
||||
if c.expected == "" {
|
||||
_, err := parts.normalizedReference()
|
||||
assert.Error(t, err, c.input)
|
||||
} else {
|
||||
ref, err := parts.normalizedReference()
|
||||
require.NoError(t, err, c.input)
|
||||
assert.Equal(t, c.expected, ref.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue