3dda067747
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 HEADb9b19409cf
# 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 on152af63ec5
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 in1052518d9f
- the ParseAnyReferenceWithSet and ShortIdentifierRegexp were kept (but deprecated) as removing happened in6d4f62d7fd
, which is not in the 2.8 branch. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
118 lines
3.9 KiB
Go
118 lines
3.9 KiB
Go
package distribution
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/distribution/reference"
|
|
)
|
|
|
|
// Scope defines the set of items that match a namespace.
|
|
type Scope interface {
|
|
// Contains returns true if the name belongs to the namespace.
|
|
Contains(name string) bool
|
|
}
|
|
|
|
type fullScope struct{}
|
|
|
|
func (f fullScope) Contains(string) bool {
|
|
return true
|
|
}
|
|
|
|
// GlobalScope represents the full namespace scope which contains
|
|
// all other scopes.
|
|
var GlobalScope = Scope(fullScope{})
|
|
|
|
// Namespace represents a collection of repositories, addressable by name.
|
|
// Generally, a namespace is backed by a set of one or more services,
|
|
// providing facilities such as registry access, trust, and indexing.
|
|
type Namespace interface {
|
|
// Scope describes the names that can be used with this Namespace. The
|
|
// global namespace will have a scope that matches all names. The scope
|
|
// effectively provides an identity for the namespace.
|
|
Scope() Scope
|
|
|
|
// Repository should return a reference to the named repository. The
|
|
// registry may or may not have the repository but should always return a
|
|
// reference.
|
|
Repository(ctx context.Context, name reference.Named) (Repository, error)
|
|
|
|
// Repositories fills 'repos' with a lexicographically sorted catalog of repositories
|
|
// up to the size of 'repos' and returns the value 'n' for the number of entries
|
|
// which were filled. 'last' contains an offset in the catalog, and 'err' will be
|
|
// set to io.EOF if there are no more entries to obtain.
|
|
Repositories(ctx context.Context, repos []string, last string) (n int, err error)
|
|
|
|
// Blobs returns a blob enumerator to access all blobs
|
|
Blobs() BlobEnumerator
|
|
|
|
// BlobStatter returns a BlobStatter to control
|
|
BlobStatter() BlobStatter
|
|
}
|
|
|
|
// RepositoryEnumerator describes an operation to enumerate repositories
|
|
type RepositoryEnumerator interface {
|
|
Enumerate(ctx context.Context, ingester func(string) error) error
|
|
}
|
|
|
|
// RepositoryRemover removes given repository
|
|
type RepositoryRemover interface {
|
|
Remove(ctx context.Context, name reference.Named) error
|
|
}
|
|
|
|
// ManifestServiceOption is a function argument for Manifest Service methods
|
|
type ManifestServiceOption interface {
|
|
Apply(ManifestService) error
|
|
}
|
|
|
|
// WithTag allows a tag to be passed into Put
|
|
func WithTag(tag string) ManifestServiceOption {
|
|
return WithTagOption{tag}
|
|
}
|
|
|
|
// WithTagOption holds a tag
|
|
type WithTagOption struct{ Tag string }
|
|
|
|
// Apply conforms to the ManifestServiceOption interface
|
|
func (o WithTagOption) Apply(m ManifestService) error {
|
|
// no implementation
|
|
return nil
|
|
}
|
|
|
|
// WithManifestMediaTypes lists the media types the client wishes
|
|
// the server to provide.
|
|
func WithManifestMediaTypes(mediaTypes []string) ManifestServiceOption {
|
|
return WithManifestMediaTypesOption{mediaTypes}
|
|
}
|
|
|
|
// WithManifestMediaTypesOption holds a list of accepted media types
|
|
type WithManifestMediaTypesOption struct{ MediaTypes []string }
|
|
|
|
// Apply conforms to the ManifestServiceOption interface
|
|
func (o WithManifestMediaTypesOption) Apply(m ManifestService) error {
|
|
// no implementation
|
|
return nil
|
|
}
|
|
|
|
// Repository is a named collection of manifests and layers.
|
|
type Repository interface {
|
|
// Named returns the name of the repository.
|
|
Named() reference.Named
|
|
|
|
// Manifests returns a reference to this repository's manifest service.
|
|
// with the supplied options applied.
|
|
Manifests(ctx context.Context, options ...ManifestServiceOption) (ManifestService, error)
|
|
|
|
// Blobs returns a reference to this repository's blob service.
|
|
Blobs(ctx context.Context) BlobStore
|
|
|
|
// TODO(stevvooe): The above BlobStore return can probably be relaxed to
|
|
// be a BlobService for use with clients. This will allow such
|
|
// implementations to avoid implementing ServeBlob.
|
|
|
|
// Tags returns a reference to this repositories tag service
|
|
Tags(ctx context.Context) TagService
|
|
}
|
|
|
|
// TODO(stevvooe): Must add close methods to all these. May want to change the
|
|
// way instances are created to better reflect internal dependency
|
|
// relationships.
|