mirror of
https://github.com/containers/podman.git
synced 2025-06-06 06:44:53 +08:00
93 lines
2.9 KiB
Go
93 lines
2.9 KiB
Go
package reference
|
|
|
|
import (
|
|
"regexp"
|
|
|
|
"github.com/distribution/reference"
|
|
"github.com/opencontainers/go-digest"
|
|
"github.com/opencontainers/go-digest/digestset"
|
|
)
|
|
|
|
// ParseNormalizedNamed parses a string into a named reference
|
|
// transforming a familiar name from Docker UI to a fully
|
|
// qualified reference. If the value may be an identifier
|
|
// use ParseAnyReference.
|
|
//
|
|
// Deprecated: use [reference.ParseNormalizedNamed].
|
|
func ParseNormalizedNamed(s string) (reference.Named, error) {
|
|
return reference.ParseNormalizedNamed(s)
|
|
}
|
|
|
|
// ParseDockerRef normalizes the image reference following the docker convention,
|
|
// which allows for references to contain both a tag and a digest.
|
|
//
|
|
// Deprecated: use [reference.ParseDockerRef].
|
|
func ParseDockerRef(ref string) (reference.Named, error) {
|
|
return reference.ParseDockerRef(ref)
|
|
}
|
|
|
|
// TagNameOnly adds the default tag "latest" to a reference if it only has
|
|
// a repo name.
|
|
//
|
|
// Deprecated: use [reference.TagNameOnly].
|
|
func TagNameOnly(ref reference.Named) reference.Named {
|
|
return reference.TagNameOnly(ref)
|
|
}
|
|
|
|
// ParseAnyReference parses a reference string as a possible identifier,
|
|
// full digest, or familiar name.
|
|
//
|
|
// Deprecated: use [reference.ParseAnyReference].
|
|
func ParseAnyReference(ref string) (reference.Reference, error) {
|
|
return reference.ParseAnyReference(ref)
|
|
}
|
|
|
|
// Functions and types below have been removed in distribution v3 and
|
|
// have not been ported to github.com/distribution/reference. See
|
|
// https://github.com/distribution/distribution/pull/3774
|
|
|
|
var (
|
|
// ShortIdentifierRegexp is the format used to represent a prefix
|
|
// of an identifier. A prefix may be used to match a sha256 identifier
|
|
// within a list of trusted identifiers.
|
|
//
|
|
// Deprecated: support for short-identifiers is deprecated, and will be removed in v3.
|
|
ShortIdentifierRegexp = regexp.MustCompile(shortIdentifier)
|
|
|
|
shortIdentifier = `([a-f0-9]{6,64})`
|
|
|
|
// anchoredShortIdentifierRegexp is used to check if a value
|
|
// is a possible identifier prefix, anchored at start and end
|
|
// of string.
|
|
anchoredShortIdentifierRegexp = regexp.MustCompile(`^` + shortIdentifier + `$`)
|
|
)
|
|
|
|
type digestReference digest.Digest
|
|
|
|
func (d digestReference) String() string {
|
|
return digest.Digest(d).String()
|
|
}
|
|
|
|
func (d digestReference) Digest() digest.Digest {
|
|
return digest.Digest(d)
|
|
}
|
|
|
|
// ParseAnyReferenceWithSet parses a reference string as a possible short
|
|
// identifier to be matched in a digest set, a full digest, or familiar name.
|
|
//
|
|
// Deprecated: support for short-identifiers is deprecated, and will be removed in v3.
|
|
func ParseAnyReferenceWithSet(ref string, ds *digestset.Set) (Reference, error) {
|
|
if ok := anchoredShortIdentifierRegexp.MatchString(ref); ok {
|
|
dgst, err := ds.Lookup(ref)
|
|
if err == nil {
|
|
return digestReference(dgst), nil
|
|
}
|
|
} else {
|
|
if dgst, err := digest.Parse(ref); err == nil {
|
|
return digestReference(dgst), nil
|
|
}
|
|
}
|
|
|
|
return reference.ParseNormalizedNamed(ref)
|
|
}
|