|
@@ -29,7 +29,7 @@ import (
|
|
|
|
|
|
type imageDescriptor struct {
|
|
type imageDescriptor struct {
|
|
refs []reference.NamedTagged
|
|
refs []reference.NamedTagged
|
|
- layers []digest.Digest
|
|
|
|
|
|
+ layers []layer.DiffID
|
|
image *image.Image
|
|
image *image.Image
|
|
layerRef layer.Layer
|
|
layerRef layer.Layer
|
|
}
|
|
}
|
|
@@ -210,7 +210,9 @@ func (s *saveSession) save(outStream io.Writer) error {
|
|
foreign = make([]ocispec.Descriptor, 0, len(foreignSrcs))
|
|
foreign = make([]ocispec.Descriptor, 0, len(foreignSrcs))
|
|
)
|
|
)
|
|
|
|
|
|
- for _, desc := range foreignSrcs {
|
|
|
|
|
|
+ // Layers in manifest must follow the actual layer order from config.
|
|
|
|
+ for _, l := range imageDescr.layers {
|
|
|
|
+ desc := foreignSrcs[l]
|
|
foreign = append(foreign, ocispec.Descriptor{
|
|
foreign = append(foreign, ocispec.Descriptor{
|
|
MediaType: desc.MediaType,
|
|
MediaType: desc.MediaType,
|
|
Digest: desc.Digest,
|
|
Digest: desc.Digest,
|
|
@@ -263,7 +265,7 @@ func (s *saveSession) save(outStream io.Writer) error {
|
|
if _, ok := reposLegacy[familiarName]; !ok {
|
|
if _, ok := reposLegacy[familiarName]; !ok {
|
|
reposLegacy[familiarName] = make(map[string]string)
|
|
reposLegacy[familiarName] = make(map[string]string)
|
|
}
|
|
}
|
|
- reposLegacy[familiarName][ref.Tag()] = imageDescr.layers[len(imageDescr.layers)-1].Encoded()
|
|
|
|
|
|
+ reposLegacy[familiarName][ref.Tag()] = digest.Digest(imageDescr.layers[len(imageDescr.layers)-1]).Encoded()
|
|
repoTags = append(repoTags, reference.FamiliarString(ref))
|
|
repoTags = append(repoTags, reference.FamiliarString(ref))
|
|
|
|
|
|
manifestDescriptors = append(manifestDescriptors, ocispec.Descriptor{
|
|
manifestDescriptors = append(manifestDescriptors, ocispec.Descriptor{
|
|
@@ -281,7 +283,8 @@ func (s *saveSession) save(outStream io.Writer) error {
|
|
for _, l := range imageDescr.layers {
|
|
for _, l := range imageDescr.layers {
|
|
// IMPORTANT: We use path, not filepath here to ensure the layers
|
|
// IMPORTANT: We use path, not filepath here to ensure the layers
|
|
// in the manifest use Unix-style forward-slashes.
|
|
// in the manifest use Unix-style forward-slashes.
|
|
- layers = append(layers, path.Join(ocispec.ImageBlobsDir, l.Algorithm().String(), l.Encoded()))
|
|
|
|
|
|
+ lDgst := digest.Digest(l)
|
|
|
|
+ layers = append(layers, path.Join(ocispec.ImageBlobsDir, lDgst.Algorithm().String(), lDgst.Encoded()))
|
|
}
|
|
}
|
|
|
|
|
|
manifest = append(manifest, manifestItem{
|
|
manifest = append(manifest, manifestItem{
|
|
@@ -380,7 +383,7 @@ func (s *saveSession) saveImage(id image.ID) (map[layer.DiffID]distribution.Desc
|
|
}
|
|
}
|
|
|
|
|
|
var parent digest.Digest
|
|
var parent digest.Digest
|
|
- var layers []digest.Digest
|
|
|
|
|
|
+ var layers []layer.DiffID
|
|
var foreignSrcs map[layer.DiffID]distribution.Descriptor
|
|
var foreignSrcs map[layer.DiffID]distribution.Descriptor
|
|
for i, diffID := range img.RootFS.DiffIDs {
|
|
for i, diffID := range img.RootFS.DiffIDs {
|
|
v1ImgCreated := time.Unix(0, 0)
|
|
v1ImgCreated := time.Unix(0, 0)
|
|
@@ -410,7 +413,7 @@ func (s *saveSession) saveImage(id image.ID) (map[layer.DiffID]distribution.Desc
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
- layers = append(layers, digest.Digest(diffID))
|
|
|
|
|
|
+ layers = append(layers, diffID)
|
|
parent = v1ID
|
|
parent = v1ID
|
|
if src.Digest != "" {
|
|
if src.Digest != "" {
|
|
if foreignSrcs == nil {
|
|
if foreignSrcs == nil {
|