[bitbake-devel] [PATCH 32/94] bitbake: webhob: clear up ORM relations

Alex DAMIAN alexandru.damian at intel.com
Tue Sep 24 16:52:01 UTC 2013


From: Alexandru DAMIAN <alexandru.damian at intel.com>

After a bit of analysis, it's become clear that Recipes
only depend on a specific Layer version, and not on
the current build.

So I clear up the Build_Layer transforming it to Layer_Version
and remove the Build dependency.

Signed-off-by: Alexandru DAMIAN <alexandru.damian at intel.com>
---
 bitbake/lib/bb/ui/buildinfohelper.py | 61 ++++++++++++++++++------------------
 bitbake/lib/webhob/orm/models.py     |  7 ++---
 2 files changed, 33 insertions(+), 35 deletions(-)

diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index 6eafea0..b0b56aa 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -8,7 +8,7 @@ import re
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webhob.whbmain.settings")
 
 import webhob.whbmain.settings as whb_django_settings
-from webhob.orm.models import Machine, Build, Task, Recipe, Build_Layer, Layer, Package
+from webhob.orm.models import Machine, Build, Task, Recipe, Layer_Version, Layer, Package
 from webhob.orm.models import Task_Dependency
 
 
@@ -81,7 +81,7 @@ class ORMWrapper(object):
     def get_update_recipe_object(self, recipe_information):
 
         recipe_object, created = Recipe.objects.get_or_create(
-                                         build_layer=recipe_information['build_layer'],
+                                         layer_version=recipe_information['layer_version'],
                                          file_path=recipe_information['file_path'])
 
         for v in vars(recipe_object):
@@ -92,19 +92,18 @@ class ORMWrapper(object):
 
         return recipe_object
 
-    def get_build_layer_object(self, build_layer_information):
+    def get_layer_version_object(self, layer_version_information):
 
-        build_layer_object = Build_Layer.objects.get_or_create(
-                                    build = build_layer_information['build'],
-                                    layer = build_layer_information['layer'],
-                                    branch = build_layer_information['branch'],
-                                    commit = build_layer_information['commit'],
-                                    priority = build_layer_information['priority']
+        layer_version_object = Layer_Version.objects.get_or_create(
+                                    layer = layer_version_information['layer'],
+                                    branch = layer_version_information['branch'],
+                                    commit = layer_version_information['commit'],
+                                    priority = layer_version_information['priority']
                                     )
 
-        build_layer_object[0].save()
+        layer_version_object[0].save()
 
-        return build_layer_object[0]
+        return layer_version_object[0]
 
     def get_update_layer_object(self, layer_information):
 
@@ -179,16 +178,16 @@ class BuildInfoHelper(object):
 
         return layer_info
 
-    def _get_build_layer_information(self, layer_object):
+    def _get_layer_version_information(self, layer_object):
 
-        build_layer_info = {}
-        build_layer_info['build'] = self.internal_state['build']
-        build_layer_info['layer'] = layer_object
-        build_layer_info['branch'] = self._get_git_branch(layer_object.local_path)
-        build_layer_info['commit'] = self._get_git_revision(layer_object.local_path)
-        build_layer_info['priority'] = 0
+        layer_version_info = {}
+        layer_version_info['build'] = self.internal_state['build']
+        layer_version_info['layer'] = layer_object
+        layer_version_info['branch'] = self._get_git_branch(layer_object.local_path)
+        layer_version_info['commit'] = self._get_git_revision(layer_object.local_path)
+        layer_version_info['priority'] = 0
 
-        return build_layer_info
+        return layer_version_info
 
 
     def _get_git_branch(self, layer_path):
@@ -235,13 +234,13 @@ class BuildInfoHelper(object):
         task_information['task_name'] = event.taskname
         return task_information
 
-    def _get_build_layer_for_path(self, path):
-        def _slkey(build_layer):
-            return len(build_layer.layer.local_path)
+    def _get_layer_version_for_path(self, path):
+        def _slkey(layer_version):
+            return len(layer_version.layer.local_path)
 
         # Heuristics: we always match recipe to the deepest layer path that
         # we can match to the recipe file path
-        for bl in sorted(self.internal_state['build_layers'], reverse=True, key=_slkey):
+        for bl in sorted(self.internal_state['layer_versions'], reverse=True, key=_slkey):
             if (path.startswith(bl.layer.local_path)):
                 return bl
 
@@ -251,10 +250,10 @@ class BuildInfoHelper(object):
 
     def _get_recipe_information_from_build_event(self, event):
 
-        build_layer_obj = self._get_build_layer_for_path(re.split(':', event.taskfile)[-1])
+        layer_version_obj = self._get_layer_version_for_path(re.split(':', event.taskfile)[-1])
 
         recipe_info = {}
-        recipe_info['build_layer'] = build_layer_obj
+        recipe_info['layer_version'] = layer_version_obj
         recipe_info['file_path'] = re.split(':', event.taskfile)[-1]
 
         return recipe_info
@@ -332,10 +331,10 @@ class BuildInfoHelper(object):
         build_obj = self.orm_wrapper.create_build_object(build_information)
         self.internal_state['build'] = build_obj
         self.internal_state['target'] = build_information['target']
-        self.internal_state['build_layers'] = []
+        self.internal_state['layer_versions'] = []
         for layer_object in self.internal_state['layers']:
-            build_layer_information = self._get_build_layer_information(layer_object)
-            self.internal_state['build_layers'].append(self.orm_wrapper.get_build_layer_object(build_layer_information))
+            layer_version_information = self._get_layer_version_information(layer_object)
+            self.internal_state['layer_versions'].append(self.orm_wrapper.get_layer_version_object(layer_version_information))
 
         del self.internal_state['layers']
 
@@ -404,14 +403,14 @@ class BuildInfoHelper(object):
         for pn in event._depgraph['pn']:
 
             file_name = re.split(':', event._depgraph['pn'][pn]['filename'])[-1]
-            build_layer_obj = self._get_build_layer_for_path(re.split(':', file_name)[-1])
+            layer_version_obj = self._get_layer_version_for_path(re.split(':', file_name)[-1])
 
-            assert build_layer_obj is not None
+            assert layer_version_obj is not None
 
             recipe_info = {}
             recipe_info['name'] = pn
             recipe_info['version'] = event._depgraph['pn'][pn]['version']
-            recipe_info['build_layer'] = build_layer_obj
+            recipe_info['layer_version'] = layer_version_obj
 
             # TODO: dump all this info in the deptree event
             recipe_info['summary'] = 'Not Available'
diff --git a/bitbake/lib/webhob/orm/models.py b/bitbake/lib/webhob/orm/models.py
index e6663a3..91b352e 100644
--- a/bitbake/lib/webhob/orm/models.py
+++ b/bitbake/lib/webhob/orm/models.py
@@ -127,7 +127,7 @@ class Filelist(models.Model):
 class Recipe(models.Model):
     name = models.CharField(max_length=100, null=True)
     version = models.CharField(max_length=100, null=True)
-    build_layer = models.ForeignKey('Build_Layer', related_name='recipe_build_layer')
+    layer_version = models.ForeignKey('Layer_Version', related_name='recipe_layer_version')
     summary = models.CharField(max_length=100, null=True)
     description = models.CharField(max_length=100, null=True)
     section = models.CharField(max_length=100, null=True)
@@ -150,9 +150,8 @@ class Layer(models.Model):
     layer_index_url = models.URLField()
 
 
-class Build_Layer(models.Model):
-    build = models.ForeignKey(Build, related_name='build_layer_build')
-    layer = models.ForeignKey(Layer, related_name='build_layer_layer')
+class Layer_Version(models.Model):
+    layer = models.ForeignKey(Layer, related_name='layer_version_layer')
     branch = models.CharField(max_length=50)
     commit = models.CharField(max_length=100)
     priority = models.IntegerField()
-- 
1.8.1.2




More information about the bitbake-devel mailing list