deprecate reference package, migrate to github.com/distribution/reference
This integrates the new module, which was extracted from this repository
at commit b9b19409cf458dcb9e1253ff44ba75bd0620faa6;
# install filter-repo (https://github.com/newren/git-filter-repo/blob/main/INSTALL.md)
brew install git-filter-repo
# create a temporary clone of docker
cd ~/Projects
git clone https://github.com/distribution/distribution.git reference
cd reference
# commit taken from
git rev-parse --verify HEAD
b9b19409cf458dcb9e1253ff44ba75bd0620faa6
# remove all code, except for general files, 'reference/', and rename to /
git filter-repo \
--path .github/workflows/codeql-analysis.yml \
--path .github/workflows/fossa.yml \
--path .golangci.yml \
--path distribution-logo.svg \
--path CODE-OF-CONDUCT.md \
--path CONTRIBUTING.md \
--path GOVERNANCE.md \
--path README.md \
--path LICENSE \
--path MAINTAINERS \
--path-glob 'reference/*.*' \
--path-rename reference/:
# initialize go.mod
go mod init github.com/distribution/reference
go mod tidy -go=1.20
This commit is based on 152af63ec5c569f074e9cf5d0e409d6928e034d8 in the main branch,
but adjusted for the 2.8 branch, with some differences:
- the Sort functions have not been kept, as they were not part of the v2 package,
and introduced in 1052518d9f962372694e004dba46d2036fb23101
- the ParseAnyReferenceWithSet and ShortIdentifierRegexp were kept (but deprecated)
as removing happened in 6d4f62d7fdfa25bd4bb42a18995c50aeededc0d6, which is not
in the 2.8 branch.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-08-30 17:50:56 +02:00
|
|
|
package reference
|
|
|
|
|
|
|
|
import (
|
|
|
|
"regexp"
|
|
|
|
|
|
|
|
"github.com/distribution/reference"
|
|
|
|
"github.com/opencontainers/go-digest"
|
2022-11-06 20:28:36 +01:00
|
|
|
"github.com/opencontainers/go-digest/digestset"
|
deprecate reference package, migrate to github.com/distribution/reference
This integrates the new module, which was extracted from this repository
at commit b9b19409cf458dcb9e1253ff44ba75bd0620faa6;
# install filter-repo (https://github.com/newren/git-filter-repo/blob/main/INSTALL.md)
brew install git-filter-repo
# create a temporary clone of docker
cd ~/Projects
git clone https://github.com/distribution/distribution.git reference
cd reference
# commit taken from
git rev-parse --verify HEAD
b9b19409cf458dcb9e1253ff44ba75bd0620faa6
# remove all code, except for general files, 'reference/', and rename to /
git filter-repo \
--path .github/workflows/codeql-analysis.yml \
--path .github/workflows/fossa.yml \
--path .golangci.yml \
--path distribution-logo.svg \
--path CODE-OF-CONDUCT.md \
--path CONTRIBUTING.md \
--path GOVERNANCE.md \
--path README.md \
--path LICENSE \
--path MAINTAINERS \
--path-glob 'reference/*.*' \
--path-rename reference/:
# initialize go.mod
go mod init github.com/distribution/reference
go mod tidy -go=1.20
This commit is based on 152af63ec5c569f074e9cf5d0e409d6928e034d8 in the main branch,
but adjusted for the 2.8 branch, with some differences:
- the Sort functions have not been kept, as they were not part of the v2 package,
and introduced in 1052518d9f962372694e004dba46d2036fb23101
- the ParseAnyReferenceWithSet and ShortIdentifierRegexp were kept (but deprecated)
as removing happened in 6d4f62d7fdfa25bd4bb42a18995c50aeededc0d6, which is not
in the 2.8 branch.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-08-30 17:50:56 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// 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)
|
|
|
|
}
|