bitbake: toaster: add get_or_create_targets API

Target objects are created before the build if build is
started from UI in build mode. However, in analysis mode Target
objects don't exist and need to be created using information
from bitbake events.

Added new API call get_or_create_targets to retrive existing
target objects or create them if they don't exist yet.

(Bitbake rev: ef69be31d133696bde54605f5a18da660099734c)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: brian avery <avery.brian@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh 2015-10-16 10:31:12 -07:00 committed by Richard Purdie
parent dcd9cd0f9e
commit 851f0d82d9
1 changed files with 21 additions and 15 deletions

View File

@ -162,8 +162,6 @@ class ORMWrapper(object):
build.bitbake_version=build_info['bitbake_version'] build.bitbake_version=build_info['bitbake_version']
build.save() build.save()
Target.objects.filter(build = build).delete()
else: else:
build = Build.objects.create( build = Build.objects.create(
project = prj, project = prj,
@ -184,18 +182,26 @@ class ORMWrapper(object):
return build return build
def create_target_objects(self, target_info): @staticmethod
assert 'build' in target_info def get_or_create_targets(target_info):
assert 'targets' in target_info result = []
for target in target_info['targets']:
targets = [] task = ''
for tgt_name in target_info['targets']: if ':' in target:
tgt_object = Target.objects.create( build = target_info['build'], target, task = target.split(':', 1)
target = tgt_name, if task.startswith('do_'):
is_image = False, task = task[3:]
) if task == 'build':
targets.append(tgt_object) task = ''
return targets obj, created = Target.objects.get_or_create(build=target_info['build'],
target=target)
if created:
obj.is_image = False
if task:
obj.task = task
obj.save()
result.append(obj)
return result
def update_build_object(self, build, errors, warnings, taskfailures): def update_build_object(self, build, errors, warnings, taskfailures):
assert isinstance(build,Build) assert isinstance(build,Build)
@ -950,7 +956,7 @@ class BuildInfoHelper(object):
target_information['targets'] = event._pkgs target_information['targets'] = event._pkgs
target_information['build'] = build_obj target_information['build'] = build_obj
self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information) self.internal_state['targets'] = self.orm_wrapper.get_or_create_targets(target_information)
# Save build configuration # Save build configuration
data = self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0] data = self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]