Skip to contentSkip to conversation

toaster: buildinfohelper Detect command line builds

PATCH In review Elliot Smith 1 participant 2 messages Oct 14, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 toaster: buildinfohelper Detect command line builds

From: Michael Wood <[email protected]>

When we're building using toaster as just a listener to bitbake (analysis mode) we need to handle the case where the toaster configuration data isn't present so we don't need to try and update the existing information.

---
 bitbake/lib/bb/ui/buildinfohelper.py | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)
bitbake/lib/bb/ui/buildinfohelper.py +22 -12
index 2d76403..a8c884d 100644
@@ -298,9 +298,13 @@ class ORMWrapper(object):
                 break
 
 
-
-        if created and must_exist:
-            raise NotExisting("Recipe object created when expected to exist", recipe_information)
+        # If we're in analysis mode then we are wholly responsible for the data
+        # and therefore we return the 'real' recipe rather than the build
+        # history copy of the recipe.
+        if  recipe_information['layer_version'].build is not None and \
+            recipe_information['layer_version'].build.project == \
+                Project.objects.get_default_project():
+            return recipe
 
         return built_recipe
 
@@ -333,14 +337,20 @@ class ORMWrapper(object):
         assert 'priority' in layer_version_information
         assert 'local_path' in layer_version_information
 
+        # If we're doing a command line build then associate this new layer with the
+        # project to avoid it 'contaminating' toaster data
+        project = None
+        if build_obj.project == Project.objects.get_default_project():
+            project = build_obj.project
+
         layer_version_object, _ = Layer_Version.objects.get_or_create(
-                                    build = build_obj,
-                                    layer = layer_obj,
-                                    branch = layer_version_information['branch'],
-                                    commit = layer_version_information['commit'],
-                                    priority = layer_version_information['priority'],
-                                    local_path = layer_version_information['local_path'],
-                                    )
+                                  build = build_obj,
+                                  layer = layer_obj,
+                                  branch = layer_version_information['branch'],
+                                  commit = layer_version_information['commit'],
+                                  priority = layer_version_information['priority'],
+                                  local_path = layer_version_information['local_path'],
+                                  project=project)
 
         self.layer_version_objects.append(layer_version_object)
 
@@ -845,7 +855,7 @@ class BuildInfoHelper(object):
         logger.warn("Could not match layer version for recipe path %s : %s", path, self.orm_wrapper.layer_version_objects)
 
         #mockup the new layer
-        unknown_layer, _ = Layer.objects.get_or_create(name="__FIXME__unidentified_layer", layer_index_url="")
+        unknown_layer, _ = Layer.objects.get_or_create(name="Unidentified layer", layer_index_url="")
         unknown_layer_version_obj, _ = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build'])
 
         # append it so we don't run into this error again and again
@@ -1067,7 +1077,7 @@ class BuildInfoHelper(object):
             task_information['disk_io'] = taskstats['disk_io']
             if 'elapsed_time' in taskstats:
                 task_information['elapsed_time'] = taskstats['elapsed_time']
-            self.orm_wrapper.get_update_task_object(task_information, True)  # must exist
+            self.orm_wrapper.get_update_task_object(task_information)
 
     def update_and_store_task(self, event):
         assert 'taskfile' in vars(event)
Signature · 12 lines
1.9.3

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
#1 lore raw
Quoted 7 lines · Elliot Smith

From: Michael Wood <[email protected]>

When we're building using toaster as just a listener to bitbake (analysis mode) we need to handle the case where the toaster configuration data
isn't present so we don't need to try and update the existing information.

I submitted this upstream as was (I decided toaster is probably OK as a subject), and have added it to toaster-next.

Elliot

Quoted 110 lines
---
 bitbake/lib/bb/ui/buildinfohelper.py | 34
++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)
bitbake/lib/bb/ui/buildinfohelper.py +1 -3
index 2d76403..a8c884d 100644
@@ -298,9 +298,13 @@ class ORMWrapper(object):
                 break
 
 
-
-        if created and must_exist:
-            raise NotExisting("Recipe object created when expected to
 exist", recipe_information)
+        # If we're in analysis mode then we are wholly responsible for

the data

bitbake/lib/bb/ui/buildinfohelper.py +7 -0
+        # and therefore we return the 'real' recipe rather than the build
+        # history copy of the recipe.
+        if  recipe_information['layer_version'].build is not None and \
+            recipe_information['layer_version'].build.project == \
+                Project.objects.get_default_project():
+            return recipe
 
         return built_recipe
@@ -333,14 +337,20 @@ class ORMWrapper(object):
         assert 'priority' in layer_version_information
         assert 'local_path' in layer_version_information
 
+        # If we're doing a command line build then associate this new

layer with the

bitbake/lib/bb/ui/buildinfohelper.py +5 -3
+        # project to avoid it 'contaminating' toaster data
+        project = None
+        if build_obj.project == Project.objects.get_default_project():
+            project = build_obj.project
+
         layer_version_object, _ = Layer_Version.objects.get_or_create(
-                                    build = build_obj,
-                                    layer = layer_obj,
-                                    branch =

layer_version_information['branch'],
- commit =
layer_version_information['commit'],
- priority =
layer_version_information['priority'],
- local_path =
layer_version_information['local_path'],

bitbake/lib/bb/ui/buildinfohelper.py +3 -1
-                                    )
+                                  build = build_obj,
+                                  layer = layer_obj,
+                                  branch =

layer_version_information['branch'],
+ commit =
layer_version_information['commit'],
+ priority =
layer_version_information['priority'],
+ local_path =
layer_version_information['local_path'],

bitbake/lib/bb/ui/buildinfohelper.py +2 -1
+                                  project=project)
 
         self.layer_version_objects.append(layer_version_object)
@@ -845,7 +855,7 @@ class BuildInfoHelper(object):
         logger.warn("Could not match layer version for recipe path %s :
 %s", path, self.orm_wrapper.layer_version_objects)
 
         #mockup the new layer
-        unknown_layer, _ =
 Layer.objects.get_or_create(name="__FIXME__unidentified_layer",
 layer_index_url="")
+        unknown_layer, _ = Layer.objects.get_or_create(name="Unidentified

layer", layer_index_url="")
unknown_layer_version_obj, _ =
Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build'])

         # append it so we don't run into this error again and again
bitbake/lib/bb/ui/buildinfohelper.py +0 -0
@@ -1067,7 +1077,7 @@ class BuildInfoHelper(object):
             task_information['disk_io'] = taskstats['disk_io']
             if 'elapsed_time' in taskstats:
                 task_information['elapsed_time'] =

taskstats['elapsed_time']
- self.orm_wrapper.get_update_task_object(task_information,
True) # must exist
+ self.orm_wrapper.get_update_task_object(task_information)

def update_and_store_task(self, event):
assert 'taskfile' in vars(event)
--
1.9.3

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.

Signature · 3 lines
Elliot Smith
Software Engineer
Intel Open Source Technology Centre