Skip to content
This repository has been archived by the owner on Oct 19, 2023. It is now read-only.

Commit

Permalink
Advisory packages uniq
Browse files Browse the repository at this point in the history
Added uniq constraint to UpdateRecordPackage
Added rpm-datarepair command to deduplicate UpdateCollectionPackages if duplicates already in DB.

closes: pulp#2754
pulp#2754
  • Loading branch information
pavelpicka committed Sep 9, 2022
1 parent 3f30ee4 commit bd1fae7
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES/2754.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added unique constraint for advisory collection packages. Added data repair command in case any duplicates already exists ``pulpcore-manager rpm-datarepair 2754``.
28 changes: 27 additions & 1 deletion pulp_rpm/app/management/commands/rpm-datarepair.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from django.core.management import BaseCommand, CommandError

from pulp_rpm.app.models import Package # noqa
from pulp_rpm.app.models import Package, UpdateCollectionPackage # noqa


class Command(BaseCommand):
Expand All @@ -22,6 +22,8 @@ def handle(self, *args, **options):

if issue == "2460":
self.repair_2460()
elif issue == "2754":
self.repair_2754()
else:
raise CommandError(_("Unknown issue: '{}'").format(issue))

Expand All @@ -45,3 +47,27 @@ def fix_requirement(require):
for package in packages:
fix_package(package)
package.save()

def repair_2754(self):
"""Perform datarepair for issue #2754."""

duplicate_pks = set()

for ucp in UpdateCollectionPackage.objects.all():
q = UpdateCollectionPackage.objects.filter(
name=ucp.name,
epoch=ucp.epoch,
version=ucp.version,
release=ucp.release,
arch=ucp.arch,
filename=ucp.filename,
update_collection=ucp.update_collection,
)
if len(q) > 1:
for pkg in q[1:]:
duplicate_pks.add(pkg.pk)

if input(
f"Are you sure to remove {len(duplicate_pks)} duplicated advisory packages? (y/N) "
) in ["Y", "y"]:
UpdateCollectionPackage.objects.filter(pk__in=duplicate_pks).delete()
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 3.2.15 on 2022-09-09 08:29

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("rpm", "0045_noartifact_modules"),
]

operations = [
migrations.AlterUniqueTogether(
name="updatecollectionpackage",
unique_together={("name", "epoch", "version", "release", "arch", "update_collection")},
),
]
3 changes: 3 additions & 0 deletions pulp_rpm/app/models/advisory.py
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,9 @@ class UpdateCollectionPackage(BaseModel):
UpdateCollection, related_name="packages", on_delete=models.CASCADE
)

class Meta:
unique_together = ("name", "epoch", "version", "release", "arch", "update_collection")

@classmethod
def createrepo_to_dict(cls, package):
"""
Expand Down

0 comments on commit bd1fae7

Please sign in to comment.