summaryrefslogtreecommitdiffstats
path: root/lib/toaster/toastermain
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2015-06-23 10:44:42 +0100
committerAlexandru DAMIAN <alexandru.damian@intel.com>2015-06-25 11:10:06 +0100
commitd5468d84c1ef83c780de5974c8e3a11eab762489 (patch)
tree959e4af2929e9157c0cb9c9aedcd29b0b6d37214 /lib/toaster/toastermain
parent2efc338cefd6e6e097af83d7dff63e9ba177d021 (diff)
downloadbitbake-d5468d84c1ef83c780de5974c8e3a11eab762489.tar.gz
toaster: delete multiple builds
This patch fixes the build deletion on unmigrated databases, and enhances it to delete multiple builds in a single run. [YOCTO #7726] Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Diffstat (limited to 'lib/toaster/toastermain')
-rw-r--r--lib/toaster/toastermain/management/commands/builddelete.py56
1 files changed, 36 insertions, 20 deletions
diff --git a/lib/toaster/toastermain/management/commands/builddelete.py b/lib/toaster/toastermain/management/commands/builddelete.py
index 5cec43671..343d3114c 100644
--- a/lib/toaster/toastermain/management/commands/builddelete.py
+++ b/lib/toaster/toastermain/management/commands/builddelete.py
@@ -1,33 +1,49 @@
from django.core.management.base import BaseCommand, CommandError
from orm.models import Build
+from django.db import OperationalError
import os
class Command(BaseCommand):
args = "buildId"
- help = "Deletes selected build"
+ help = "Deletes selected build(s)"
def handle(self, buildId, *args, **options):
- b = Build.objects.get(pk = buildId)
- # theoretically, just b.delete() would suffice
- # however SQLite runs into problems when you try to
- # delete too many rows at once, so we delete some direct
- # relationships from Build manually.
+ for bid in buildId.split(","):
+ b = Build.objects.get(pk = bid)
+ # theoretically, just b.delete() would suffice
+ # however SQLite runs into problems when you try to
+ # delete too many rows at once, so we delete some direct
+ # relationships from Build manually.
+ for t in b.target_set.all():
+ t.delete()
+ for t in b.task_build.all():
+ t.delete()
+ for p in b.package_set.all():
+ p.delete()
+ for lv in b.layer_version_build.all():
+ lv.delete()
+ for v in b.variable_build.all():
+ v.delete()
+ for l in b.logmessage_set.all():
+ l.delete()
- for t in b.target_set.all():
- t.delete()
- for t in b.task_build.all():
- t.delete()
- for p in b.package_set.all():
- p.delete()
- for lv in b.layer_version_build.all():
- lv.delete()
- for v in b.variable_build.all():
- v.delete()
- for l in b.logmessage_set.all():
- l.delete()
+ # delete the build; some databases might have had problem with migration of the bldcontrol app
+ retry_count = 0
+ need_bldcontrol_migration = False
+ while True:
+ if retry_count >= 5:
+ break
+ retry_count += 1
+ if need_bldcontrol_migration:
+ from django.core import management
+ management.call_command('migrate', 'bldcontrol', interactive=False)
- # this should take care of the rest
- b.delete()
+ try:
+ b.delete()
+ break
+ except OperationalError as e:
+ # execute migrations
+ need_bldcontrol_migration = True