func buildLayerInfosForCopy(manifestInfos []manifest.LayerInfo, physicalInfos []types.BlobInfo) ([]types.BlobInfo, error) {
	nextPhysical := 0
	res := make([]types.BlobInfo, len(manifestInfos))
	for i, mi := range manifestInfos {
		if mi.EmptyLayer {
			res[i] = types.BlobInfo{
				Digest:    image.GzippedEmptyLayerDigest,
				Size:      int64(len(image.GzippedEmptyLayer)),
				MediaType: mi.MediaType,
			}
		} else {
			if nextPhysical >= len(physicalInfos) {
				return nil, fmt.Errorf("expected more than %d physical layers to exist", len(physicalInfos))
			}
			res[i] = physicalInfos[nextPhysical]
			nextPhysical++
		}
	}
	if nextPhysical != len(physicalInfos) {
		return nil, fmt.Errorf("used only %d out of %d physical layers", nextPhysical, len(physicalInfos))
	}
	return res, nil
}
func buildLayerInfosForCopy(manifestInfos []manifest.LayerInfo, physicalInfos []types.BlobInfo) ([]types.BlobInfo, error) {
	nextPhysical := 0
	res := make([]types.BlobInfo, len(manifestInfos))
	for i, mi := range manifestInfos {
		if mi.EmptyLayer {
			res[i] = types.BlobInfo{
				Digest:    image.GzippedEmptyLayerDigest,
				Size:      int64(len(image.GzippedEmptyLayer)),
				MediaType: mi.MediaType,
			}
		} else {
			if nextPhysical >= len(physicalInfos) {
				return nil, fmt.Errorf("expected more than %d physical layers to exist", len(physicalInfos))
			}
			res[i] = physicalInfos[nextPhysical]
			nextPhysical++
		}
	}
	if nextPhysical != len(physicalInfos) {
		return nil, fmt.Errorf("used only %d out of %d physical layers", nextPhysical, len(physicalInfos))
	}
	return res, nil
}
func buildLayerInfosForCopy ( manifestInfos [ ] manifest . LayerInfo , physicalInfos [ ] types . BlobInfo ) ( [ ] types . BlobInfo , error ) { nextPhysical := 0 res := make ( [ ] types . BlobInfo , len ( manifestInfos ) ) for i , mi := range manifestInfos { if mi . EmptyLayer { res [ i ] = types . BlobInfo { Digest : image . GzippedEmptyLayerDigest , Size : int64 ( len ( image . GzippedEmptyLayer ) ) , MediaType : mi . MediaType , } } else { if nextPhysical >= len ( physicalInfos ) { return nil , fmt . Errorf ( " " , len ( physicalInfos ) ) } res [ i ] = physicalInfos [ nextPhysical ] nextPhysical ++ } } if nextPhysical != len ( physicalInfos ) { return nil , fmt . Errorf ( " " , nextPhysical , len ( physicalInfos ) ) } return res , nil }
// buildLayerInfosForCopy builds a LayerInfosForCopy return value based on manifestInfos from the original manifest,
// but using layer data which we can actually produce — physicalInfos for non-empty layers,
// and image.GzippedEmptyLayer for empty ones.
// (This is split basically only to allow easily unit-testing the part that has no dependencies on the external environment.)
buildLayerInfosForCopy builds a LayerInfosForCopy return value based on manifestInfos from the original manifest but using layer data which we can actually produce — physicalInfos for non - empty layers and image . GzippedEmptyLayer for empty ones . ( This is split basically only to allow easily unit - testing the part that has no dependencies on the external environment . )