1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package registry
- import (
- "strings"
- "github.com/docker/distribution/digest"
- )
- // Reference represents a tag or digest within a repository
- type Reference interface {
- // HasDigest returns whether the reference has a verifiable
- // content addressable reference which may be considered secure.
- HasDigest() bool
- // ImageName returns an image name for the given repository
- ImageName(string) string
- // Returns a string representation of the reference
- String() string
- }
- type tagReference struct {
- tag string
- }
- func (tr tagReference) HasDigest() bool {
- return false
- }
- func (tr tagReference) ImageName(repo string) string {
- return repo + ":" + tr.tag
- }
- func (tr tagReference) String() string {
- return tr.tag
- }
- type digestReference struct {
- digest digest.Digest
- }
- func (dr digestReference) HasDigest() bool {
- return true
- }
- func (dr digestReference) ImageName(repo string) string {
- return repo + "@" + dr.String()
- }
- func (dr digestReference) String() string {
- return dr.digest.String()
- }
- // ParseReference parses a reference into either a digest or tag reference
- func ParseReference(ref string) Reference {
- if strings.Contains(ref, ":") {
- dgst, err := digest.ParseDigest(ref)
- if err == nil {
- return digestReference{digest: dgst}
- }
- }
- return tagReference{tag: ref}
- }
- // DigestReference creates a digest reference using a digest
- func DigestReference(dgst digest.Digest) Reference {
- return digestReference{digest: dgst}
- }
|