blob: 343d3114c01ec976b4525e99e1a05fcf1a59b24e [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001from django.core.management.base import BaseCommand, CommandError
2from orm.models import Build
3from django.db import OperationalError
4import os
5
6
7
8class Command(BaseCommand):
9 args = "buildId"
10 help = "Deletes selected build(s)"
11
12 def handle(self, buildId, *args, **options):
13 for bid in buildId.split(","):
14 b = Build.objects.get(pk = bid)
15 # theoretically, just b.delete() would suffice
16 # however SQLite runs into problems when you try to
17 # delete too many rows at once, so we delete some direct
18 # relationships from Build manually.
19 for t in b.target_set.all():
20 t.delete()
21 for t in b.task_build.all():
22 t.delete()
23 for p in b.package_set.all():
24 p.delete()
25 for lv in b.layer_version_build.all():
26 lv.delete()
27 for v in b.variable_build.all():
28 v.delete()
29 for l in b.logmessage_set.all():
30 l.delete()
31
32 # delete the build; some databases might have had problem with migration of the bldcontrol app
33 retry_count = 0
34 need_bldcontrol_migration = False
35 while True:
36 if retry_count >= 5:
37 break
38 retry_count += 1
39 if need_bldcontrol_migration:
40 from django.core import management
41 management.call_command('migrate', 'bldcontrol', interactive=False)
42
43 try:
44 b.delete()
45 break
46 except OperationalError as e:
47 # execute migrations
48 need_bldcontrol_migration = True
49