( ctx context.Context, resolvedRef string, rootDesc ocispecs.Descriptor, fetcher remotes.Fetcher, matcher platforms.MatchComparer, checkRootManifestPlatform bool, )
| 84 | } |
| 85 | |
| 86 | func (r *Resolver) ensureImageConfigMetadata( |
| 87 | ctx context.Context, |
| 88 | resolvedRef string, |
| 89 | rootDesc ocispecs.Descriptor, |
| 90 | fetcher remotes.Fetcher, |
| 91 | matcher platforms.MatchComparer, |
| 92 | checkRootManifestPlatform bool, |
| 93 | ) (_ *imageConfigMetadata, rerr error) { |
| 94 | ctx = contentutil.RegisterContentPayloadTypes(ctx) |
| 95 | leaseCtx, release, err := bkcache.WithLease(ctx, r.leaseManager, leases.WithExpiration(imageMetadataLeaseTTL), bkcache.MakeTemporary) |
| 96 | if err != nil { |
| 97 | return nil, err |
| 98 | } |
| 99 | success := false |
| 100 | defer func() { |
| 101 | if !success { |
| 102 | _ = release(context.WithoutCancel(leaseCtx)) |
| 103 | } |
| 104 | }() |
| 105 | |
| 106 | sourceLabelHandler, err := docker.AppendDistributionSourceLabel(r.contentStore, resolvedRef) |
| 107 | if err != nil { |
| 108 | return nil, err |
| 109 | } |
| 110 | |
| 111 | var metadataMu sync.Mutex |
| 112 | var metadataDescs []ocispecs.Descriptor |
| 113 | recordMetadata := images.HandlerFunc(func(ctx context.Context, desc ocispecs.Descriptor) ([]ocispecs.Descriptor, error) { |
| 114 | if !images.IsLayerType(desc.MediaType) { |
| 115 | metadataMu.Lock() |
| 116 | metadataDescs = append(metadataDescs, desc) |
| 117 | metadataMu.Unlock() |
| 118 | } |
| 119 | return nil, nil |
| 120 | }) |
| 121 | |
| 122 | fetchHandler := remotes.FetchHandler(r.contentStore, fetcher) |
| 123 | fetchMetadata := images.HandlerFunc(func(ctx context.Context, desc ocispecs.Descriptor) ([]ocispecs.Descriptor, error) { |
| 124 | if images.IsLayerType(desc.MediaType) { |
| 125 | return nil, images.ErrSkipDesc |
| 126 | } |
| 127 | return fetchHandler(ctx, desc) |
| 128 | }) |
| 129 | |
| 130 | handler := images.Handlers( |
| 131 | recordMetadata, |
| 132 | fetchMetadata, |
| 133 | sourceLabelHandler, |
| 134 | imageConfigMetadataChildrenHandler(r.contentStore, matcher), |
| 135 | ) |
| 136 | if err := images.Dispatch(leaseCtx, handler, nil, rootDesc); err != nil { |
| 137 | return nil, err |
| 138 | } |
| 139 | if err := r.attachContentToLease(leaseCtx, metadataDescs); err != nil { |
| 140 | return nil, err |
| 141 | } |
| 142 | |
| 143 | manifestDesc, manifest, err := resolveManifestDescriptor(leaseCtx, r.contentStore, rootDesc, matcher, checkRootManifestPlatform) |
no test coverage detected