remotes: use mediatype helpers

Signed-off-by: Bjorn Neergaard <bjorn.neergaard@docker.com>
This commit is contained in:
Bjorn Neergaard 2023-09-27 11:18:34 -06:00
parent 69034f7558
commit cdba61603c
No known key found for this signature in database
4 changed files with 18 additions and 32 deletions

View File

@ -41,9 +41,7 @@ const LegacyConfigMediaType = "application/octet-stream"
// 1. original manifest will be deleted by next gc round. // 1. original manifest will be deleted by next gc round.
// 2. don't cover manifest list. // 2. don't cover manifest list.
func ConvertManifest(ctx context.Context, store content.Store, desc ocispec.Descriptor) (ocispec.Descriptor, error) { func ConvertManifest(ctx context.Context, store content.Store, desc ocispec.Descriptor) (ocispec.Descriptor, error) {
if !(desc.MediaType == images.MediaTypeDockerSchema2Manifest || if !images.IsManifestType(desc.MediaType) {
desc.MediaType == ocispec.MediaTypeImageManifest) {
log.G(ctx).Warnf("do nothing for media type: %s", desc.MediaType) log.G(ctx).Warnf("do nothing for media type: %s", desc.MediaType)
return desc, nil return desc, nil
} }

View File

@ -94,10 +94,8 @@ func (r dockerFetcher) Fetch(ctx context.Context, desc ocispec.Descriptor) (io.R
} }
// Try manifests endpoints for manifests types // Try manifests endpoints for manifests types
switch desc.MediaType { if images.IsManifestType(desc.MediaType) || images.IsIndexType(desc.MediaType) ||
case images.MediaTypeDockerSchema2Manifest, images.MediaTypeDockerSchema2ManifestList, desc.MediaType == images.MediaTypeDockerSchema1Manifest {
images.MediaTypeDockerSchema1Manifest,
ocispec.MediaTypeImageManifest, ocispec.MediaTypeImageIndex:
var firstErr error var firstErr error
for _, host := range r.hosts { for _, host := range r.hosts {

View File

@ -103,12 +103,10 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str
host = hosts[0] host = hosts[0]
) )
switch desc.MediaType { if images.IsManifestType(desc.MediaType) || images.IsIndexType(desc.MediaType) {
case images.MediaTypeDockerSchema2Manifest, images.MediaTypeDockerSchema2ManifestList,
ocispec.MediaTypeImageManifest, ocispec.MediaTypeImageIndex:
isManifest = true isManifest = true
existCheck = getManifestPath(p.object, desc.Digest) existCheck = getManifestPath(p.object, desc.Digest)
default: } else {
existCheck = []string{"blobs", desc.Digest.String()} existCheck = []string{"blobs", desc.Digest.String()}
} }

View File

@ -71,17 +71,17 @@ func MakeRefKey(ctx context.Context, desc ocispec.Descriptor) string {
} }
} }
switch mt := desc.MediaType; { switch {
case mt == images.MediaTypeDockerSchema2Manifest || mt == ocispec.MediaTypeImageManifest: case images.IsManifestType(desc.MediaType):
return "manifest-" + key return "manifest-" + key
case mt == images.MediaTypeDockerSchema2ManifestList || mt == ocispec.MediaTypeImageIndex: case images.IsIndexType(desc.MediaType):
return "index-" + key return "index-" + key
case images.IsLayerType(mt): case images.IsLayerType(desc.MediaType):
return "layer-" + key return "layer-" + key
case images.IsKnownConfig(mt): case images.IsKnownConfig(desc.MediaType):
return "config-" + key return "config-" + key
default: default:
log.G(ctx).Warnf("reference for unknown type: %s", mt) log.G(ctx).Warnf("reference for unknown type: %s", desc.MediaType)
return "unknown-" + key return "unknown-" + key
} }
} }
@ -214,20 +214,18 @@ func PushContent(ctx context.Context, pusher Pusher, desc ocispec.Descriptor, st
indexStack := []ocispec.Descriptor{} indexStack := []ocispec.Descriptor{}
filterHandler := images.HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { filterHandler := images.HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
switch desc.MediaType { if images.IsManifestType(desc.MediaType) {
case images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
m.Lock() m.Lock()
manifests = append(manifests, desc) manifests = append(manifests, desc)
m.Unlock() m.Unlock()
return nil, images.ErrStopHandler return nil, images.ErrStopHandler
case images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex: } else if images.IsIndexType(desc.MediaType) {
m.Lock() m.Lock()
indexStack = append(indexStack, desc) indexStack = append(indexStack, desc)
m.Unlock() m.Unlock()
return nil, images.ErrStopHandler return nil, images.ErrStopHandler
default:
return nil, nil
} }
return nil, nil
}) })
pushHandler := PushHandler(pusher, store) pushHandler := PushHandler(pusher, store)
@ -319,20 +317,17 @@ func FilterManifestByPlatformHandler(f images.HandlerFunc, m platforms.Matcher)
} }
var descs []ocispec.Descriptor var descs []ocispec.Descriptor
switch desc.MediaType { if images.IsManifestType(desc.MediaType) {
case images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
if m.Match(*desc.Platform) { if m.Match(*desc.Platform) {
descs = children descs = children
} else { } else {
for _, child := range children { for _, child := range children {
if child.MediaType == images.MediaTypeDockerSchema2Config || if images.IsConfigType(child.MediaType) {
child.MediaType == ocispec.MediaTypeImageConfig {
descs = append(descs, child) descs = append(descs, child)
} }
} }
} }
default: } else {
descs = children descs = children
} }
return descs, nil return descs, nil
@ -350,10 +345,7 @@ func annotateDistributionSourceHandler(f images.HandlerFunc, provider content.In
// Distribution source is only used for config or blob but may be inherited from // Distribution source is only used for config or blob but may be inherited from
// a manifest or manifest list // a manifest or manifest list
switch desc.MediaType { if !images.IsManifestType(desc.MediaType) && !images.IsIndexType(desc.MediaType) {
case images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest,
images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex:
default:
return children, nil return children, nil
} }