From 9a1cd79ca3c911fc6f6b8c8dcdaa7a1a0c76fc4c Mon Sep 17 00:00:00 2001 From: thesayyn Date: Mon, 18 Mar 2024 14:47:33 -0700 Subject: [PATCH] revert /remote --- pkg/v1/remote/catalog.go | 4 ++-- pkg/v1/remote/descriptor.go | 4 ++-- pkg/v1/remote/fetcher.go | 15 +++++++++++++++ pkg/v1/remote/options.go | 31 ++++++++++--------------------- pkg/v1/remote/puller.go | 23 ++++++++--------------- pkg/v1/remote/pusher.go | 3 +++ pkg/v1/remote/referrers.go | 2 +- 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/pkg/v1/remote/catalog.go b/pkg/v1/remote/catalog.go index 01531b297..a0281b9fd 100644 --- a/pkg/v1/remote/catalog.go +++ b/pkg/v1/remote/catalog.go @@ -37,7 +37,7 @@ func CatalogPage(target name.Registry, last string, n int, options ...Option) ([ return nil, err } - f, err := makeFetcher(o.context, target, o) + f, err := newPuller(o).fetcher(o.context, target) if err != nil { return nil, err } @@ -83,7 +83,7 @@ func Catalog(ctx context.Context, target name.Registry, options ...Option) ([]st ctx = o.context } - return newPuller(o).Catalog(ctx, target) + return newPuller(o).catalog(ctx, target, o.pageSize) } func (f *fetcher) catalogPage(ctx context.Context, reg name.Registry, next string, pageSize int) (*Catalogs, error) { diff --git a/pkg/v1/remote/descriptor.go b/pkg/v1/remote/descriptor.go index a96af5108..fafe910e9 100644 --- a/pkg/v1/remote/descriptor.go +++ b/pkg/v1/remote/descriptor.go @@ -90,11 +90,11 @@ func Head(ref name.Reference, options ...Option) (*v1.Descriptor, error) { // Handle options and fetch the manifest with the acceptable MediaTypes in the // Accept header. func get(ref name.Reference, acceptable []types.MediaType, options ...Option) (*Descriptor, error) { - o, err := makeOptions(append(options, WithAcceptableMediaTypes(acceptable))...) + o, err := makeOptions(options...) if err != nil { return nil, err } - return newPuller(o).Get(o.context, ref) + return newPuller(o).get(o.context, ref, acceptable, o.platform) } // Image converts the Descriptor into a v1.Image. diff --git a/pkg/v1/remote/fetcher.go b/pkg/v1/remote/fetcher.go index 8d7243694..4e61002be 100644 --- a/pkg/v1/remote/fetcher.go +++ b/pkg/v1/remote/fetcher.go @@ -99,6 +99,21 @@ func (f *fetcher) url(resource, identifier string) url.URL { return u } +func (f *fetcher) get(ctx context.Context, ref name.Reference, acceptable []types.MediaType, platform v1.Platform) (*Descriptor, error) { + b, desc, err := f.fetchManifest(ctx, ref, acceptable) + if err != nil { + return nil, err + } + return &Descriptor{ + ref: ref, + ctx: ctx, + fetcher: *f, + Manifest: b, + Descriptor: *desc, + platform: platform, + }, nil +} + func (f *fetcher) fetchManifest(ctx context.Context, ref name.Reference, acceptable []types.MediaType) ([]byte, *v1.Descriptor, error) { u := f.url("manifests", ref.Identifier()) req, err := http.NewRequest(http.MethodGet, u.String(), nil) diff --git a/pkg/v1/remote/options.go b/pkg/v1/remote/options.go index 10b836d98..99a2bb2eb 100644 --- a/pkg/v1/remote/options.go +++ b/pkg/v1/remote/options.go @@ -28,7 +28,6 @@ import ( "github.com/google/go-containerregistry/pkg/logs" v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/remote/transport" - "github.com/google/go-containerregistry/pkg/v1/types" ) // Option is a functional option for remote operations. @@ -53,9 +52,8 @@ type options struct { filter map[string]string // Set by Reuse, we currently store one or the other. - puller *Puller - pusher *Pusher - acceptableMediaTypes []types.MediaType + puller *Puller + pusher *Pusher } var defaultPlatform = v1.Platform{ @@ -129,15 +127,14 @@ var DefaultTransport http.RoundTripper = &http.Transport{ func makeOptions(opts ...Option) (*options, error) { o := &options{ - transport: DefaultTransport, - platform: defaultPlatform, - acceptableMediaTypes: allManifestMediaTypes, - context: context.Background(), - jobs: defaultJobs, - pageSize: defaultPageSize, - retryPredicate: defaultRetryPredicate, - retryBackoff: defaultRetryBackoff, - retryStatusCodes: defaultRetryStatusCodes, + transport: DefaultTransport, + platform: defaultPlatform, + context: context.Background(), + jobs: defaultJobs, + pageSize: defaultPageSize, + retryPredicate: defaultRetryPredicate, + retryBackoff: defaultRetryBackoff, + retryStatusCodes: defaultRetryStatusCodes, } for _, option := range opts { @@ -226,14 +223,6 @@ func WithPlatform(p v1.Platform) Option { } } -// WithAcceptableMediaTypes sets acceptable media types for artifacts -func WithAcceptableMediaTypes(acceptable []types.MediaType) Option { - return func(o *options) error { - o.acceptableMediaTypes = acceptable - return nil - } -} - // WithContext is a functional option for setting the context in http requests // performed by a given function. Note that this context is used for _all_ // http requests, not just the initial volley. E.g., for remote.Image, the diff --git a/pkg/v1/remote/puller.go b/pkg/v1/remote/puller.go index 29f3bf624..b5dab2bc0 100644 --- a/pkg/v1/remote/puller.go +++ b/pkg/v1/remote/puller.go @@ -40,10 +40,14 @@ func NewPuller(options ...Option) (*Puller, error) { if err != nil { return nil, err } + return newPuller(o), nil } func newPuller(o *options) *Puller { + if o.puller != nil { + return o.puller + } return &Puller{ o: o, } @@ -91,7 +95,7 @@ func (p *Puller) Head(ctx context.Context, ref name.Reference) (*v1.Descriptor, // Get is like remote.Get, but avoids re-authenticating when possible. func (p *Puller) Get(ctx context.Context, ref name.Reference) (*Descriptor, error) { - return p.get(ctx, ref, p.o.acceptableMediaTypes, p.o.platform) + return p.get(ctx, ref, allManifestMediaTypes, p.o.platform) } func (p *Puller) get(ctx context.Context, ref name.Reference, acceptable []types.MediaType, platform v1.Platform) (*Descriptor, error) { @@ -99,22 +103,11 @@ func (p *Puller) get(ctx context.Context, ref name.Reference, acceptable []types if err != nil { return nil, err } - mf, desc, err := f.fetchManifest(ctx, ref, acceptable) - if err != nil { - return nil, err - } - return &Descriptor{ - ref: ref, - ctx: ctx, - fetcher: *f, - Manifest: mf, - Descriptor: *desc, - platform: platform, - }, nil + return f.get(ctx, ref, acceptable, platform) } func (p *Puller) Artifact(ctx context.Context, ref name.Reference) (partial.Artifact, error) { - return p.artifact(ctx, ref, p.o.acceptableMediaTypes, p.o.platform) + return p.artifact(ctx, ref, allManifestMediaTypes, p.o.platform) } func (p *Puller) artifact(ctx context.Context, ref name.Reference, acceptable []types.MediaType, platform v1.Platform) (partial.Artifact, error) { @@ -243,7 +236,7 @@ func (p *Puller) catalogger(ctx context.Context, reg name.Registry, pageSize int }, nil } -func (p *Puller) Referrers(ctx context.Context, d name.Digest, filter map[string]string) (v1.ImageIndex, error) { +func (p *Puller) referrers(ctx context.Context, d name.Digest, filter map[string]string) (v1.ImageIndex, error) { f, err := p.fetcher(ctx, d.Context()) if err != nil { return nil, err diff --git a/pkg/v1/remote/pusher.go b/pkg/v1/remote/pusher.go index 28e7358ae..79f24a4d0 100644 --- a/pkg/v1/remote/pusher.go +++ b/pkg/v1/remote/pusher.go @@ -109,6 +109,9 @@ func NewPusher(options ...Option) (*Pusher, error) { } func newPusher(o *options) *Pusher { + if o.pusher != nil { + return o.pusher + } return &Pusher{ o: o, } diff --git a/pkg/v1/remote/referrers.go b/pkg/v1/remote/referrers.go index 641d94a60..e30ca57ed 100644 --- a/pkg/v1/remote/referrers.go +++ b/pkg/v1/remote/referrers.go @@ -38,7 +38,7 @@ func Referrers(d name.Digest, options ...Option) (v1.ImageIndex, error) { if err != nil { return nil, err } - return newPuller(o).Referrers(o.context, d, o.filter) + return newPuller(o).referrers(o.context, d, o.filter) } // https://github.com/opencontainers/distribution-spec/blob/main/spec.md#referrers-tag-schema