12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // +build !windows
- package distribution // import "github.com/docker/docker/distribution"
- import (
- "context"
- "github.com/containerd/containerd/platforms"
- "github.com/docker/distribution"
- "github.com/docker/distribution/manifest/manifestlist"
- specs "github.com/opencontainers/image-spec/specs-go/v1"
- "github.com/sirupsen/logrus"
- )
- func (ld *v2LayerDescriptor) open(ctx context.Context) (distribution.ReadSeekCloser, error) {
- blobs := ld.repo.Blobs(ctx)
- return blobs.Open(ctx, ld.digest)
- }
- func filterManifests(manifests []manifestlist.ManifestDescriptor, p specs.Platform) []manifestlist.ManifestDescriptor {
- p = platforms.Normalize(withDefault(p))
- m := platforms.NewMatcher(p)
- var matches []manifestlist.ManifestDescriptor
- for _, desc := range manifests {
- if m.Match(toOCIPlatform(desc.Platform)) {
- matches = append(matches, desc)
- logrus.Debugf("found match for %s with media type %s, digest %s", platforms.Format(p), desc.MediaType, desc.Digest.String())
- }
- }
- // deprecated: backwards compatibility with older versions that didn't compare variant
- if len(matches) == 0 && p.Architecture == "arm" {
- p = platforms.Normalize(p)
- for _, desc := range manifests {
- if desc.Platform.OS == p.OS && desc.Platform.Architecture == p.Architecture {
- matches = append(matches, desc)
- logrus.Debugf("found deprecated partial match for %s with media type %s, digest %s", platforms.Format(p), desc.MediaType, desc.Digest.String())
- }
- }
- }
- return matches
- }
- // checkImageCompatibility is a Windows-specific function. No-op on Linux
- func checkImageCompatibility(imageOS, imageOSVersion string) error {
- return nil
- }
- func withDefault(p specs.Platform) specs.Platform {
- def := platforms.DefaultSpec()
- if p.OS == "" {
- p.OS = def.OS
- }
- if p.Architecture == "" {
- p.Architecture = def.Architecture
- p.Variant = def.Variant
- }
- return p
- }
- func formatPlatform(platform specs.Platform) string {
- if platform.OS == "" {
- platform = platforms.DefaultSpec()
- }
- return platforms.Format(platform)
- }
|