Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | from django.core.management.base import BaseCommand, CommandError |
| 2 | from orm.models import Build |
| 3 | from django.db import OperationalError |
| 4 | import os |
| 5 | |
| 6 | |
| 7 | |
| 8 | class 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 | |