working commit
This commit is contained in:
@@ -63,3 +63,68 @@ func descrsFromManifest(name, reference string, manifest *ocispec.Manifest, rawM
|
||||
}
|
||||
return manifestDescr, blobDescrs, err
|
||||
}
|
||||
|
||||
func layersDiff(name, reference string, existingManifest, incomingManifest *ocispec.Manifest, rawManifest []byte) ([]descr.Blob, []descr.Blob, error) {
|
||||
var err error
|
||||
newBlobDescrs := make([]descr.Blob, 0)
|
||||
delBlobDescrs := make([]descr.Blob, 0)
|
||||
|
||||
// Calculating old layers
|
||||
delLayers := make([]ocispec.Descriptor, 0)
|
||||
for _, oldLayer := range existingManifest.Layers {
|
||||
uniq := true
|
||||
for _, newLayer := range incomingManifest.Layers {
|
||||
if oldLayer.Digest == newLayer.Digest {
|
||||
uniq = false
|
||||
}
|
||||
}
|
||||
if uniq {
|
||||
delLayers = append(delLayers, oldLayer)
|
||||
}
|
||||
}
|
||||
// Calculating new layers
|
||||
newLayers := make([]ocispec.Descriptor, 0)
|
||||
for _, newLayer := range incomingManifest.Layers {
|
||||
uniq := true
|
||||
for _, oldLayer := range existingManifest.Layers {
|
||||
if oldLayer.Digest == newLayer.Digest {
|
||||
uniq = false
|
||||
}
|
||||
}
|
||||
if uniq {
|
||||
newLayers = append(newLayers, newLayer)
|
||||
}
|
||||
}
|
||||
if incomingManifest.Config.Digest != existingManifest.Config.Digest {
|
||||
delLayers = append(delLayers, existingManifest.Config)
|
||||
newLayers = append(newLayers, incomingManifest.Config)
|
||||
}
|
||||
// Converting to new blob
|
||||
timestamp := auxtool.TimeNow()
|
||||
for _, layer := range newLayers {
|
||||
blobDescr := descr.Blob{
|
||||
ID: auxuuid.NewUUID(),
|
||||
Name: name,
|
||||
Reference: reference,
|
||||
MediaType: layer.MediaType,
|
||||
Digest: string(layer.Digest),
|
||||
Size: layer.Size,
|
||||
CreatedAt: timestamp,
|
||||
UpdatedAt: timestamp,
|
||||
}
|
||||
newBlobDescrs = append(newBlobDescrs, blobDescr)
|
||||
}
|
||||
// Converting to old blobs
|
||||
for _, layer := range delLayers {
|
||||
blobDescr := descr.Blob{
|
||||
ID: auxuuid.NewUUID(),
|
||||
Name: name,
|
||||
Reference: reference,
|
||||
MediaType: layer.MediaType,
|
||||
Digest: string(layer.Digest),
|
||||
Size: layer.Size,
|
||||
}
|
||||
delBlobDescrs = append(delBlobDescrs, blobDescr)
|
||||
}
|
||||
return newBlobDescrs, delBlobDescrs, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user