(ctx context.Context, ref string, opts PullOpts)
| 239 | } |
| 240 | |
| 241 | func (r *Resolver) Pull(ctx context.Context, ref string, opts PullOpts) (_ *PulledImage, rerr error) { |
| 242 | span, ctx := tracing.StartSpan(ctx, "pulling "+ref, telemetry.Encapsulated()) |
| 243 | defer func() { |
| 244 | tracing.FinishWithError(span, rerr) |
| 245 | }() |
| 246 | |
| 247 | platformMatcher := platforms.Only(platforms.Normalize(opts.Platform)) |
| 248 | if opts.ResolveMode == ResolveModeDefault { |
| 249 | if parsed, err := reference.ParseNormalizedNamed(ref); err == nil { |
| 250 | if canonical, ok := parsed.(reference.Canonical); ok { |
| 251 | rootDesc, found, err := r.localCanonicalRootDescriptor(ctx, canonical.Digest()) |
| 252 | if err != nil { |
| 253 | return nil, err |
| 254 | } |
| 255 | if found { |
| 256 | closure, found, release, err := r.tryLocalCanonicalClosure(ctx, canonical.String(), rootDesc, platformMatcher, opts.LayerLimit) |
| 257 | if err != nil { |
| 258 | return nil, err |
| 259 | } |
| 260 | if found { |
| 261 | return &PulledImage{ |
| 262 | Ref: canonical.String(), |
| 263 | ManifestDesc: closure.ManifestDesc, |
| 264 | ConfigDesc: closure.ConfigDesc, |
| 265 | Layers: closure.Layers, |
| 266 | Nonlayers: closure.Nonlayers, |
| 267 | release: release, |
| 268 | }, nil |
| 269 | } |
| 270 | } |
| 271 | } |
| 272 | } |
| 273 | } |
| 274 | |
| 275 | resolvedRef, rootDesc, resolver, err := r.resolveRemoteRootDescriptor(ctx, ref, opts.Network) |
| 276 | if err != nil { |
| 277 | return nil, err |
| 278 | } |
| 279 | fetcher, err := resolver.Fetcher(ctx, resolvedRef) |
| 280 | if err != nil { |
| 281 | return nil, err |
| 282 | } |
| 283 | var manifestDesc ocispecs.Descriptor |
| 284 | var manifest ocispecs.Manifest |
| 285 | if opts.ResolveMode == ResolveModeDefault { |
| 286 | metadata, err := r.ensureImageConfigMetadata(ctx, resolvedRef, rootDesc, fetcher, platformMatcher, true) |
| 287 | if err != nil { |
| 288 | return nil, err |
| 289 | } |
| 290 | manifestDesc = metadata.manifestDesc |
| 291 | manifest = metadata.manifest |
| 292 | } else { |
| 293 | provider := contentutil.FromFetcher(fetcher) |
| 294 | var err error |
| 295 | manifestDesc, manifest, err = resolveManifestDescriptor(ctx, provider, rootDesc, platformMatcher, true) |
| 296 | if err != nil { |
| 297 | return nil, err |
| 298 | } |
nothing calls this directly
no test coverage detected