Skip to contentSkip to conversation

toaster:add-get_or_create_targets-API

PATCH New brian avery 1 participant 2 messages Oct 16, 2015

lore
Share & tools
lore
#0 lore raw

cover 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.

-b

The following changes since commit a9053ac0829eb01f6f002587854d01e47a78e6f0:

bitbake: toaster: Add tests for error message display on the build dashboard (2015-10-16 15:00:00 +0100)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib bavery/submit/ed/2015-10-16_add-get_or_create_targets-API
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=bavery/submit/ed/2015-10-16_add-get_or_create_targets-API

Ed Bartosh (1):
toaster: add get_or_create_targets API

 lib/bb/ui/buildinfohelper.py | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

--
1.9.1

#1 lore raw

PATCH 1/1 toaster: add get_or_create_targets API

From: Ed Bartosh <[email protected]>

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.

---
 lib/bb/ui/buildinfohelper.py | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)
lib/bb/ui/buildinfohelper.py +21 -15
index 286fb6a..2fc1a43 100644
@@ -162,8 +162,6 @@ class ORMWrapper(object):
             build.bitbake_version=build_info['bitbake_version']
             build.save()
 
-            Target.objects.filter(build = build).delete()
-
         else:
             build = Build.objects.create(
                                     project = prj,
@@ -184,18 +182,26 @@ class ORMWrapper(object):
 
         return build
 
-    def create_target_objects(self, target_info):
-        assert 'build' in target_info
-        assert 'targets' in target_info
-
-        targets = []
-        for tgt_name in target_info['targets']:
-            tgt_object = Target.objects.create( build = target_info['build'],
-                                    target = tgt_name,
-                                    is_image = False,
-                                    )
-            targets.append(tgt_object)
-        return targets
+    @staticmethod
+    def get_or_create_targets(target_info):
+        result = []
+        for target in target_info['targets']:
+            task = ''
+            if ':' in target:
+                target, task = target.split(':', 1)
+            if task.startswith('do_'):
+                task = task[3:]
+            if task == 'build':
+                task = ''
+            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):
         assert isinstance(build,Build)
@@ -950,7 +956,7 @@ class BuildInfoHelper(object):
         target_information['targets'] = event._pkgs
         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
         data = self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]
Signature · 1 line
1.9.1