working commit

This commit is contained in:
2026-02-05 14:37:54 +02:00
parent 2dfb4a88b8
commit e81037d75f
10 changed files with 408 additions and 119 deletions
+65
View File
@@ -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
}