@@ -219,20 +219,15 @@ func (r *countingReader) Read(p []byte) (int, error) {
219219var _ remotes.Resolver = & dockerResolver {}
220220
221221func (r * dockerResolver ) Resolve (ctx context.Context , ref string ) (string , ocispec.Descriptor , error ) {
222- refspec , err := reference . Parse (ref )
222+ base , err := r . resolveDockerBase (ref )
223223 if err != nil {
224224 return "" , ocispec.Descriptor {}, err
225225 }
226-
226+ refspec := base . refspec
227227 if refspec .Object == "" {
228228 return "" , ocispec.Descriptor {}, reference .ErrObjectRequired
229229 }
230230
231- base , err := r .base (refspec )
232- if err != nil {
233- return "" , ocispec.Descriptor {}, err
234- }
235-
236231 var (
237232 lastErr error
238233 paths [][]string
@@ -387,12 +382,7 @@ func (r *dockerResolver) Resolve(ctx context.Context, ref string) (string, ocisp
387382}
388383
389384func (r * dockerResolver ) Fetcher (ctx context.Context , ref string ) (remotes.Fetcher , error ) {
390- refspec , err := reference .Parse (ref )
391- if err != nil {
392- return nil , err
393- }
394-
395- base , err := r .base (refspec )
385+ base , err := r .resolveDockerBase (ref )
396386 if err != nil {
397387 return nil , err
398388 }
@@ -403,23 +393,27 @@ func (r *dockerResolver) Fetcher(ctx context.Context, ref string) (remotes.Fetch
403393}
404394
405395func (r * dockerResolver ) Pusher (ctx context.Context , ref string ) (remotes.Pusher , error ) {
406- refspec , err := reference .Parse (ref )
407- if err != nil {
408- return nil , err
409- }
410-
411- base , err := r .base (refspec )
396+ base , err := r .resolveDockerBase (ref )
412397 if err != nil {
413398 return nil , err
414399 }
415400
416401 return dockerPusher {
417402 dockerBase : base ,
418- object : refspec .Object ,
403+ object : base . refspec .Object ,
419404 tracker : r .tracker ,
420405 }, nil
421406}
422407
408+ func (r * dockerResolver ) resolveDockerBase (ref string ) (* dockerBase , error ) {
409+ refspec , err := reference .Parse (ref )
410+ if err != nil {
411+ return nil , err
412+ }
413+
414+ return r .base (refspec )
415+ }
416+
423417type dockerBase struct {
424418 refspec reference.Spec
425419 repository string
@@ -451,10 +445,8 @@ func (r *dockerBase) filterHosts(caps HostCapabilities) (hosts []RegistryHost) {
451445}
452446
453447func (r * dockerBase ) request (host RegistryHost , method string , ps ... string ) * request {
454- header := http.Header {}
455- for key , value := range r .header {
456- header [key ] = append (header [key ], value ... )
457- }
448+ header := r .header .Clone ()
449+
458450 for key , value := range host .Header {
459451 header [key ] = append (header [key ], value ... )
460452 }
0 commit comments