Refactor dockerResolver to make code simple
1.add resolveDockerBase helper 2.dockerBase header copy with header.Clone() Signed-off-by: songjiayang <songjiayang@jd.com>
This commit is contained in:
parent
bb6590da80
commit
5867c88832
@ -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...)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user