blob: bf69a8fb80b4ffff9054f25fadb3088fe91a99a8 [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001from django.core.management.base import BaseCommand, CommandError
Patrick Williamsd7e96312015-09-22 08:09:05 -05002from django.core.exceptions import ObjectDoesNotExist
Patrick Williamsc124f4f2015-09-15 14:41:29 -05003from orm.models import Build
4from django.db import OperationalError
5import os
6
7
8
9class Command(BaseCommand):
Patrick Williamsd7e96312015-09-22 08:09:05 -050010 args = '<buildID1 buildID2 .....>'
Patrick Williamsc124f4f2015-09-15 14:41:29 -050011 help = "Deletes selected build(s)"
12
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080013 def add_arguments(self, parser):
14 parser.add_argument('buildids', metavar='N', type=int, nargs='+',
15 help="Build ID's to delete")
16
Patrick Williamsd7e96312015-09-22 08:09:05 -050017 def handle(self, *args, **options):
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080018 for bid in options['buildids']:
Patrick Williamsd7e96312015-09-22 08:09:05 -050019 try:
20 b = Build.objects.get(pk = bid)
21 except ObjectDoesNotExist:
Patrick Williamsc0f7c042017-02-23 20:41:17 -060022 print('build %s does not exist, skipping...' %(bid))
Patrick Williamsd7e96312015-09-22 08:09:05 -050023 continue
Patrick Williamsc124f4f2015-09-15 14:41:29 -050024 # theoretically, just b.delete() would suffice
25 # however SQLite runs into problems when you try to
26 # delete too many rows at once, so we delete some direct
27 # relationships from Build manually.
28 for t in b.target_set.all():
29 t.delete()
30 for t in b.task_build.all():
31 t.delete()
32 for p in b.package_set.all():
33 p.delete()
34 for lv in b.layer_version_build.all():
35 lv.delete()
36 for v in b.variable_build.all():
37 v.delete()
38 for l in b.logmessage_set.all():
39 l.delete()
40
41 # delete the build; some databases might have had problem with migration of the bldcontrol app
42 retry_count = 0
43 need_bldcontrol_migration = False
44 while True:
45 if retry_count >= 5:
46 break
47 retry_count += 1
48 if need_bldcontrol_migration:
49 from django.core import management
50 management.call_command('migrate', 'bldcontrol', interactive=False)
51
52 try:
53 b.delete()
54 break
55 except OperationalError as e:
56 # execute migrations
57 need_bldcontrol_migration = True
58