Merge pull request #4302 from songjiayang/update-docker-resolver

Refactor dockerResolver with resolveDockerBase helper
This commit is contained in:
Phil Estes 2021-01-12 11:15:06 -05:00 committed by GitHub
commit 9db6aa625d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -219,20 +219,15 @@ func (r *countingReader) Read(p []byte) (int, error) {
var _ remotes.Resolver = &dockerResolver{} var _ remotes.Resolver = &dockerResolver{}
func (r *dockerResolver) Resolve(ctx context.Context, ref string) (string, ocispec.Descriptor, error) { func (r *dockerResolver) Resolve(ctx context.Context, ref string) (string, ocispec.Descriptor, error) {
refspec, err := reference.Parse(ref) base, err := r.resolveDockerBase(ref)
if err != nil { if err != nil {
return "", ocispec.Descriptor{}, err return "", ocispec.Descriptor{}, err
} }
refspec := base.refspec
if refspec.Object == "" { if refspec.Object == "" {
return "", ocispec.Descriptor{}, reference.ErrObjectRequired return "", ocispec.Descriptor{}, reference.ErrObjectRequired
} }
base, err := r.base(refspec)
if err != nil {
return "", ocispec.Descriptor{}, err
}
var ( var (
lastErr error lastErr error
paths [][]string paths [][]string
@ -387,12 +382,7 @@ func (r *dockerResolver) Resolve(ctx context.Context, ref string) (string, ocisp
} }
func (r *dockerResolver) Fetcher(ctx context.Context, ref string) (remotes.Fetcher, error) { func (r *dockerResolver) Fetcher(ctx context.Context, ref string) (remotes.Fetcher, error) {
refspec, err := reference.Parse(ref) base, err := r.resolveDockerBase(ref)
if err != nil {
return nil, err
}
base, err := r.base(refspec)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -403,23 +393,27 @@ func (r *dockerResolver) Fetcher(ctx context.Context, ref string) (remotes.Fetch
} }
func (r *dockerResolver) Pusher(ctx context.Context, ref string) (remotes.Pusher, error) { func (r *dockerResolver) Pusher(ctx context.Context, ref string) (remotes.Pusher, error) {
refspec, err := reference.Parse(ref) base, err := r.resolveDockerBase(ref)
if err != nil {
return nil, err
}
base, err := r.base(refspec)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return dockerPusher{ return dockerPusher{
dockerBase: base, dockerBase: base,
object: refspec.Object, object: base.refspec.Object,
tracker: r.tracker, tracker: r.tracker,
}, nil }, nil
} }
func (r *dockerResolver) resolveDockerBase(ref string) (*dockerBase, error) {
refspec, err := reference.Parse(ref)
if err != nil {
return nil, err
}
return r.base(refspec)
}
type dockerBase struct { type dockerBase struct {
refspec reference.Spec refspec reference.Spec
repository string repository string
@ -451,10 +445,8 @@ func (r *dockerBase) filterHosts(caps HostCapabilities) (hosts []RegistryHost) {
} }
func (r *dockerBase) request(host RegistryHost, method string, ps ...string) *request { func (r *dockerBase) request(host RegistryHost, method string, ps ...string) *request {
header := http.Header{} header := r.header.Clone()
for key, value := range r.header {
header[key] = append(header[key], value...)
}
for key, value := range host.Header { for key, value := range host.Header {
header[key] = append(header[key], value...) header[key] = append(header[key], value...)
} }