summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2014-11-25 13:40:38 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-11-28 14:02:58 +0000
commitd9644d49fd72a7489982de551de0d0df73ac6d57 (patch)
treeb96ac254d7febddbeb1f1ef09d9c4d2f88bbc4b2
parentaf1f9fda8b295d277a6967453b2d03e43474ab68 (diff)
downloadast2050-yocto-poky-d9644d49fd72a7489982de551de0d0df73ac6d57.zip
ast2050-yocto-poky-d9644d49fd72a7489982de551de0d0df73ac6d57.tar.gz
bitbake: toasterui: fix layer identification for managed builds
If we have a managed build, we match the layers used for build with the layers configured for project, as we know where the layers are coming from [YOCTO #6962] (Bitbake rev: e02ec052a62cbc476bdac65cb7cea1167ce04781) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/ui/buildinfohelper.py38
1 files changed, 25 insertions, 13 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index a3401ce..e428e4c 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -117,15 +117,14 @@ class ORMWrapper(object):
if brbe is not None:
from bldcontrol.models import BuildEnvironment, BuildRequest
- try:
- br, be = brbe.split(":")
- buildrequest = BuildRequest.objects.get(pk = br)
- buildrequest.build = build
- buildrequest.save()
- build.project_id = buildrequest.project_id
- build.save()
- except BuildRequest.DoesNotExist:
- pass
+ br, be = brbe.split(":")
+
+ buildrequest = BuildRequest.objects.get(pk = br)
+ buildrequest.build = build
+ buildrequest.save()
+
+ build.project_id = buildrequest.project_id
+ build.save()
return build
def create_target_objects(self, target_info):
@@ -250,17 +249,30 @@ class ORMWrapper(object):
return layer_version_object
- def get_update_layer_object(self, layer_information):
+ def get_update_layer_object(self, layer_information, brbe):
assert 'name' in layer_information
assert 'local_path' in layer_information
assert 'layer_index_url' in layer_information
- layer_object, created = Layer.objects.get_or_create(
+ if brbe is None:
+ layer_object, created = Layer.objects.get_or_create(
name=layer_information['name'],
local_path=layer_information['local_path'],
layer_index_url=layer_information['layer_index_url'])
+ return layer_object
+ else:
+ # we are under managed mode; we must match the layer used in the Project Layer
+ from bldcontrol.models import BuildEnvironment, BuildRequest
+ br, be = brbe.split(":")
+
+ buildrequest = BuildRequest.objects.get(pk = br)
+
+ # we might have a race condition here, as the project layers may change between the build trigger and the actual build execution
+ # but we can only match on the layer name, so the worst thing can happen is a mis-identification of the layer, not a total failure
+ layer_object = buildrequest.project.projectlayer_set.get(layercommit__layer__name=layer_information['name']).layercommit.layer
+
+ return layer_object
- return layer_object
def save_target_file_information(self, build_obj, target_obj, filedata):
assert isinstance(build_obj, Build)
@@ -689,7 +701,7 @@ class BuildInfoHelper(object):
layerinfos = event._localdata
self.internal_state['lvs'] = {}
for layer in layerinfos:
- self.internal_state['lvs'][self.orm_wrapper.get_update_layer_object(layerinfos[layer])] = layerinfos[layer]['version']
+ self.internal_state['lvs'][self.orm_wrapper.get_update_layer_object(layerinfos[layer], self.brbe)] = layerinfos[layer]['version']
def store_started_build(self, event):
OpenPOWER on IntegriCloud