Skip to content

Commit 86b29c7

Browse files
committed
Fix unit tests
1 parent 44957b5 commit 86b29c7

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

pkg/cli/image/manifest/manifest.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -482,13 +482,11 @@ func ProcessManifestList(ctx context.Context, srcDigest digest.Digest, srcManife
482482
// ManifestsFromList returns a map of all image manifests for a given manifest. It returns the ManifestList and its digest if
483483
// srcManifest is a list, or an error.
484484
func ManifestsFromList(ctx context.Context, srcDigest digest.Digest, srcManifest distribution.Manifest, manifests distribution.ManifestService, ref imagereference.DockerImageReference) (map[digest.Digest]distribution.Manifest, *manifestlist.DeserializedManifestList, digest.Digest, error) {
485-
switch t := srcManifest.(type) {
486-
case *manifestlist.DeserializedManifestList:
485+
processManifestList := func(manifestList *manifestlist.DeserializedManifestList) (map[digest.Digest]distribution.Manifest, *manifestlist.DeserializedManifestList, digest.Digest, error) {
487486
allManifests := make(map[digest.Digest]distribution.Manifest)
488487
manifestDigest := srcDigest
489-
manifestList := t
490488

491-
for i, manifest := range t.Manifests {
489+
for i, manifest := range manifestList.Manifests {
492490
childManifest, err := manifests.Get(ctx, manifest.Digest, PreferManifestList)
493491
if err != nil {
494492
return nil, nil, "", fmt.Errorf("unable to retrieve source image %s manifest #%d from manifest list: %v", ref, i+1, err)
@@ -497,12 +495,45 @@ func ManifestsFromList(ctx context.Context, srcDigest digest.Digest, srcManifest
497495
}
498496

499497
return allManifests, manifestList, manifestDigest, nil
498+
}
499+
switch t := srcManifest.(type) {
500+
case *manifestlist.DeserializedManifestList:
501+
return processManifestList(t)
502+
503+
case *ocischema.DeserializedImageIndex:
504+
manifestList, err := manifestListFromIndex(t)
505+
if err != nil {
506+
return nil, nil, "", err
507+
}
508+
509+
return processManifestList(manifestList)
500510

501511
default:
502512
return map[digest.Digest]distribution.Manifest{srcDigest: srcManifest}, nil, "", nil
503513
}
504514
}
505515

516+
func manifestListFromIndex(index *ocischema.DeserializedImageIndex) (*manifestlist.DeserializedManifestList, error) {
517+
descriptors := make([]manifestlist.ManifestDescriptor, len(index.Manifests))
518+
for i, m := range index.Manifests {
519+
descriptors[i] = manifestlist.ManifestDescriptor{
520+
Descriptor: m,
521+
Platform: manifestlist.PlatformSpec{
522+
Architecture: m.Platform.Architecture,
523+
OS: m.Platform.OS,
524+
OSVersion: m.Platform.OSVersion,
525+
OSFeatures: m.Platform.OSFeatures,
526+
Variant: m.Platform.Variant,
527+
},
528+
}
529+
}
530+
list, err := manifestlist.FromDescriptors(descriptors)
531+
if err != nil {
532+
return nil, fmt.Errorf("unable to convert manifest index into list: %w", err)
533+
}
534+
return list, nil
535+
}
536+
506537
// PutManifestInCompatibleSchema just calls ManifestService.Put right now.
507538
// No schema conversion is happening anymore. Instead of using this function,
508539
// call ManifestService.Put directly.

0 commit comments

Comments
 (0)