func (s *Source) GetManifest(ctx context.Context, instanceDigest *digest.Digest) ([]byte, string, error) {
	if instanceDigest != nil {
		// How did we even get here? GetManifest(ctx, nil) has returned a manifest.DockerV2Schema2MediaType.
		return nil, "", errors.Errorf(`Manifest lists are not supported by "docker-daemon:"`)
	}
	if s.generatedManifest == nil {
		if err := s.ensureCachedDataIsPresent(); err != nil {
			return nil, "", err
		}
		m := manifest.Schema2{
			SchemaVersion: 2,
			MediaType:     manifest.DockerV2Schema2MediaType,
			ConfigDescriptor: manifest.Schema2Descriptor{
				MediaType: manifest.DockerV2Schema2ConfigMediaType,
				Size:      int64(len(s.configBytes)),
				Digest:    s.configDigest,
			},
			LayersDescriptors: []manifest.Schema2Descriptor{},
		}
		for _, diffID := range s.orderedDiffIDList {
			li, ok := s.knownLayers[diffID]
			if !ok {
				return nil, "", errors.Errorf("Internal inconsistency: Information about layer %s missing", diffID)
			}
			m.LayersDescriptors = append(m.LayersDescriptors, manifest.Schema2Descriptor{
				Digest:    diffID, // diffID is a digest of the uncompressed tarball
				MediaType: manifest.DockerV2Schema2LayerMediaType,
				Size:      li.size,
			})
		}
		manifestBytes, err := json.Marshal(&m)
		if err != nil {
			return nil, "", err
		}
		s.generatedManifest = manifestBytes
	}
	return s.generatedManifest, manifest.DockerV2Schema2MediaType, nil
}
func (s *Source) GetManifest(ctx context.Context, instanceDigest *digest.Digest) ([]byte, string, error) {
	if instanceDigest != nil {
		
		return nil, "", errors.Errorf(`Manifest lists are not supported by "docker-daemon:"`)
	}
	if s.generatedManifest == nil {
		if err := s.ensureCachedDataIsPresent(); err != nil {
			return nil, "", err
		}
		m := manifest.Schema2{
			SchemaVersion: 2,
			MediaType:     manifest.DockerV2Schema2MediaType,
			ConfigDescriptor: manifest.Schema2Descriptor{
				MediaType: manifest.DockerV2Schema2ConfigMediaType,
				Size:      int64(len(s.configBytes)),
				Digest:    s.configDigest,
			},
			LayersDescriptors: []manifest.Schema2Descriptor{},
		}
		for _, diffID := range s.orderedDiffIDList {
			li, ok := s.knownLayers[diffID]
			if !ok {
				return nil, "", errors.Errorf("Internal inconsistency: Information about layer %s missing", diffID)
			}
			m.LayersDescriptors = append(m.LayersDescriptors, manifest.Schema2Descriptor{
				Digest:    diffID, 
				MediaType: manifest.DockerV2Schema2LayerMediaType,
				Size:      li.size,
			})
		}
		manifestBytes, err := json.Marshal(&m)
		if err != nil {
			return nil, "", err
		}
		s.generatedManifest = manifestBytes
	}
	return s.generatedManifest, manifest.DockerV2Schema2MediaType, nil
}
func ( s * Source ) GetManifest ( ctx context . Context , instanceDigest * digest . Digest ) ( [ ] byte , string , error ) { if instanceDigest != nil { // How did we even get here? GetManifest(ctx, nil) has returned a manifest.DockerV2Schema2MediaType. return nil , " " , errors . Errorf ( `Manifest lists are not supported by "docker-daemon:"` ) } if s . generatedManifest == nil { if err := s . ensureCachedDataIsPresent ( ) ; err != nil { return nil , " " , err } m := manifest . Schema2 { SchemaVersion : 2 , MediaType : manifest . DockerV2Schema2MediaType , ConfigDescriptor : manifest . Schema2Descriptor { MediaType : manifest . DockerV2Schema2ConfigMediaType , Size : int64 ( len ( s . configBytes ) ) , Digest : s . configDigest , } , LayersDescriptors : [ ] manifest . Schema2Descriptor { } , } for _ , diffID := range s . orderedDiffIDList { li , ok := s . knownLayers [ diffID ] if ! ok { return nil , " " , errors . Errorf ( " " , diffID ) } m . LayersDescriptors = append ( m . LayersDescriptors , manifest . Schema2Descriptor { Digest : diffID , // diffID is a digest of the uncompressed tarball MediaType : manifest . DockerV2Schema2LayerMediaType , Size : li . size , } ) } manifestBytes , err := json . Marshal ( & m ) if err != nil { return nil , " " , err } s . generatedManifest = manifestBytes } return s . generatedManifest , manifest . DockerV2Schema2MediaType , nil }
// GetManifest returns the image's manifest along with its MIME type (which may be empty when it can't be determined but the manifest is available).
// It may use a remote (= slow) service.
// If instanceDigest is not nil, it contains a digest of the specific manifest instance to retrieve (when the primary manifest is a manifest list);
// this never happens if the primary manifest is not a manifest list (e.g. if the source never returns manifest lists).
GetManifest returns the image s manifest along with its MIME type ( which may be empty when it can t be determined but the manifest is available ) . It may use a remote ( = slow ) service . If instanceDigest is not nil it contains a digest of the specific manifest instance to retrieve ( when the primary manifest is a manifest list ) ; this never happens if the primary manifest is not a manifest list ( e . g . if the source never returns manifest lists ) .