working commit

This commit is contained in:
2026-02-05 22:18:01 +02:00
parent 7f2d73768c
commit 4f01100473
+82
View File
@@ -272,3 +272,85 @@ func (oper *Operator) GetManifest(ctx context.Context, params *GetManifestParams
return res, http.StatusOK, err
}
type DeleteManifestParams struct {
Name string
Reference string
}
type DeleteManifestResult struct{}
func (oper *Operator) DeleteManifest(ctx context.Context, params *DeleteManifestParams) (*DeleteManifestResult, int, error) {
var err error
res := &DeleteManifestResult{}
manifestDescr := descr.Manifest{}
var exists bool
var reference string
// Check manifest by digest as name
if stringLikeSHADigest(params.Reference) {
digest := normalizeSHADigest(params.Reference)
exists, manifestDescr, err = oper.mdb.GetManifestByDigest(ctx, params.Name, digest)
if err != nil {
return res, http.StatusInternalServerError, err
}
if !exists {
return res, http.StatusNotFound, err
}
reference = manifestDescr.Reference
} else {
// Check manifest by name and reference
exists, manifestDescr, err = oper.mdb.GetManifestByReference(ctx, params.Name, params.Reference)
if err != nil {
return res, http.StatusInternalServerError, err
}
if !exists {
return res, http.StatusNotFound, err
}
reference = params.Reference
}
// Get blobs associated with the name
err = oper.deleteManifestObjects(ctx, params.Name, reference)
if err != nil {
return res, http.StatusInternalServerError, err
}
return res, http.StatusAccepted, err
}
func (oper *Operator) deleteManifestObjects(ctx context.Context, name, reference string) error {
var err error
// Get blobs associated with the name
layers, err := oper.mdb.GetBlobsByReferense(ctx, name, reference)
if err != nil {
return err
}
for _, blob := range layers {
// Delete descr record
err = oper.mdb.DeleteBlobByNameDigest(ctx, blob.Name, blob.Digest)
if err != nil {
return err
}
// Check blob file
exists, _, err := oper.store.BlobExists(blob.Digest)
if err != nil {
return err
}
if exists {
// Check blob usage
blobUsage, err := oper.mdb.GetBlobUsage(ctx, blob.Digest)
if err != nil {
return err
}
// Delete if blob useless
if blobUsage == 0 {
err = oper.store.DeleteBlob(blob.Digest)
if err != nil {
return err
}
}
}
}
err = oper.mdb.DeleteManifest(ctx, name, reference)
if err != nil {
return err
}
return err
}