Skip to content

Commit f213021

Browse files
authored
Merge pull request #677 from furlongm/packages-dupes
handle existing duplicate packages in get_or_create
2 parents 71e46f9 + 77bc10e commit f213021

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

packages/utils.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
from arch.models import PackageArchitecture
2424
from packages.models import PackageName, Package, PackageUpdate, PackageCategory, PackageString
25-
from patchman.signals import error_message, info_message
25+
from patchman.signals import error_message, info_message, warning_message
2626

2727

2828
def convert_package_to_packagestring(package):
@@ -174,14 +174,29 @@ def get_or_create_package(name, epoch, version, release, arch, p_type):
174174
package_name, c = PackageName.objects.get_or_create(name=name)
175175
package_arch, c = PackageArchitecture.objects.get_or_create(name=arch)
176176
with transaction.atomic():
177-
package, c = Package.objects.get_or_create(
178-
name=package_name,
179-
arch=package_arch,
180-
epoch=epoch,
181-
version=version,
182-
release=release,
183-
packagetype=p_type,
184-
)
177+
try:
178+
package, c = Package.objects.get_or_create(
179+
name=package_name,
180+
arch=package_arch,
181+
epoch=epoch,
182+
version=version,
183+
release=release,
184+
packagetype=p_type,
185+
)
186+
except MultipleObjectsReturned:
187+
packages = Package.objects.filter(
188+
name=package_name,
189+
arch=package_arch,
190+
epoch=epoch,
191+
version=version,
192+
release=release,
193+
packagetype=p_type,
194+
)
195+
package = packages.first()
196+
# TODO this should handle gentoo package categories too, otherwise we may be deleting packages
197+
# that should be kept
198+
warning_message.send(sender=None, text=f'Deleting duplicate packages: {packages.exclude(id=package.id)}')
199+
packages.exclude(id=package.id).delete()
185200
return package
186201

187202

0 commit comments

Comments
 (0)