diff options
-rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 69 |
1 files changed, 28 insertions, 41 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index e96e93440e..43a1411fa0 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
@@ -46,6 +46,8 @@ from orm.models import Project, CustomImagePackage | |||
46 | from orm.models import signal_runbuilds | 46 | from orm.models import signal_runbuilds |
47 | 47 | ||
48 | from bldcontrol.models import BuildEnvironment, BuildRequest | 48 | from bldcontrol.models import BuildEnvironment, BuildRequest |
49 | from bldcontrol.models import BRLayer | ||
50 | from bldcontrol import bbcontroller | ||
49 | 51 | ||
50 | from bb.msg import BBLogFormatter as formatter | 52 | from bb.msg import BBLogFormatter as formatter |
51 | from django.db import models | 53 | from django.db import models |
@@ -436,48 +438,33 @@ class ORMWrapper(object): | |||
436 | else: | 438 | else: |
437 | br_id, be_id = brbe.split(":") | 439 | br_id, be_id = brbe.split(":") |
438 | 440 | ||
439 | # find layer by checkout path; | 441 | # Find the layer version by matching the layer event information |
440 | from bldcontrol import bbcontroller | 442 | # against the metadata we have in Toaster |
441 | bc = bbcontroller.getBuildEnvironmentController(pk = be_id) | ||
442 | |||
443 | # we might have a race condition here, as the project layers may change between the build trigger and the actual build execution | ||
444 | # 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 | ||
445 | |||
446 | # note that this is different | ||
447 | buildrequest = BuildRequest.objects.get(pk = br_id) | ||
448 | for brl in buildrequest.brlayer_set.all(): | ||
449 | if brl.local_source_dir: | ||
450 | localdirname = os.path.join(brl.local_source_dir, | ||
451 | brl.dirpath) | ||
452 | else: | ||
453 | localdirname = os.path.join(bc.getGitCloneDirectory(brl.giturl, brl.commit), brl.dirpath) | ||
454 | # we get a relative path, unless running in HEAD mode where the path is absolute | ||
455 | if not localdirname.startswith("/"): | ||
456 | localdirname = os.path.join(bc.be.sourcedir, localdirname) | ||
457 | #logger.debug(1, "Localdirname %s lcal_path %s" % (localdirname, layer_information['local_path'])) | ||
458 | if localdirname.startswith(layer_information['local_path']): | ||
459 | # If the build request came from toaster this field | ||
460 | # should contain the information from the layer_version | ||
461 | # That created this build request. | ||
462 | if brl.layer_version: | ||
463 | return brl.layer_version | ||
464 | |||
465 | # This might be a local layer (i.e. no git info) so try | ||
466 | # matching local_source_dir | ||
467 | if brl.local_source_dir and brl.local_source_dir == layer_information["local_path"]: | ||
468 | return brl.layer_version | ||
469 | |||
470 | # we matched the BRLayer, but we need the layer_version that generated this BR; reverse of the Project.schedule_build() | ||
471 | #logger.debug(1, "Matched %s to BRlayer %s" % (pformat(layer_information["local_path"]), localdirname)) | ||
472 | |||
473 | for pl in buildrequest.project.projectlayer_set.filter(layercommit__layer__name = brl.name): | ||
474 | if pl.layercommit.layer.vcs_url == brl.giturl : | ||
475 | layer = pl.layercommit.layer | ||
476 | layer.save() | ||
477 | return layer | ||
478 | |||
479 | raise NotExisting("Unidentified layer %s" % pformat(layer_information)) | ||
480 | 443 | ||
444 | try: | ||
445 | br_layer = BRLayer.objects.get(req=br_id, | ||
446 | name=layer_information['name']) | ||
447 | return br_layer.layer_version | ||
448 | except (BRLayer.MultipleObjectsReturned, BRLayer.DoesNotExist): | ||
449 | # There are multiple of the same layer name or the name | ||
450 | # hasn't been determined by the toaster.bbclass layer | ||
451 | # so let's filter by the local_path | ||
452 | bc = bbcontroller.getBuildEnvironmentController(pk=be_id) | ||
453 | for br_layer in BRLayer.objects.filter(req=br_id): | ||
454 | if br_layer.giturl and \ | ||
455 | layer_information['local_path'].endswith( | ||
456 | bc.getGitCloneDirectory(br_layer.giturl, | ||
457 | br_layer.commit)): | ||
458 | return br_layer.layer_version | ||
459 | |||
460 | if br_layer.local_source_dir == \ | ||
461 | layer_information['local_path']: | ||
462 | return br_layer.layer_version | ||
463 | |||
464 | # We've reached the end of our search and couldn't find the layer | ||
465 | # we can continue but some data may be missing | ||
466 | raise NotExisting("Unidentified layer %s" % | ||
467 | pformat(layer_information)) | ||
481 | 468 | ||
482 | def save_target_file_information(self, build_obj, target_obj, filedata): | 469 | def save_target_file_information(self, build_obj, target_obj, filedata): |
483 | assert isinstance(build_obj, Build) | 470 | assert isinstance(build_obj, Build) |