diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2015-06-23 10:44:42 +0100 |
---|---|---|
committer | Alexandru DAMIAN <alexandru.damian@intel.com> | 2015-06-25 11:10:06 +0100 |
commit | d5468d84c1ef83c780de5974c8e3a11eab762489 (patch) | |
tree | 959e4af2929e9157c0cb9c9aedcd29b0b6d37214 /lib/toaster/toastermain | |
parent | 2efc338cefd6e6e097af83d7dff63e9ba177d021 (diff) | |
download | bitbake-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.py | 56 |
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 |