diff options
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index 4e2d4a7dec..491fd1566d 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
@@ -656,18 +656,41 @@ class BuildInfoHelper(object): | |||
656 | assert path.startswith("/") | 656 | assert path.startswith("/") |
657 | assert 'build' in self.internal_state | 657 | assert 'build' in self.internal_state |
658 | 658 | ||
659 | def _slkey(layer_version): | 659 | if self.brbe is None: |
660 | assert isinstance(layer_version, Layer_Version) | 660 | def _slkey_interactive(layer_version): |
661 | return len(layer_version.layer.local_path) | 661 | assert isinstance(layer_version, Layer_Version) |
662 | 662 | return len(layer_version.layer.local_path) | |
663 | # Heuristics: we always match recipe to the deepest layer path that | 663 | |
664 | # we can match to the recipe file path | 664 | # Heuristics: we always match recipe to the deepest layer path in the discovered layers |
665 | for bl in sorted(self.orm_wrapper.layer_version_objects, reverse=True, key=_slkey): | 665 | for lvo in sorted(self.orm_wrapper.layer_version_objects, reverse=True, key=_slkey_interactive): |
666 | if (path.startswith(bl.layer.local_path)): | 666 | # we can match to the recipe file path |
667 | return bl | 667 | if path.startswith(lvo.layer.local_path): |
668 | 668 | return lvo | |
669 | #if we get here, we didn't read layers correctly; mockup the new layer | 669 | |
670 | unknown_layer, created = Layer.objects.get_or_create(name="unknown", local_path="/", layer_index_url="") | 670 | else: |
671 | br_id, be_id = self.brbe.split(":") | ||
672 | from bldcontrol.bbcontroller import getBuildEnvironmentController | ||
673 | from bldcontrol.models import BuildRequest | ||
674 | bc = getBuildEnvironmentController(pk = be_id) | ||
675 | |||
676 | def _slkey_managed(layer_version): | ||
677 | return len(bc.getGitCloneDirectory(layer_version.giturl, layer_version.commit) + layer_version.dirpath) | ||
678 | |||
679 | # Heuristics: we match the path to where the layers have been checked out | ||
680 | for brl in sorted(BuildRequest.objects.get(pk = br_id).brlayer_set.all(), reverse = True, key = _slkey_managed): | ||
681 | localdirname = os.path.join(os.path.join(bc.be.sourcedir, bc.getGitCloneDirectory(brl.giturl, brl.commit)), brl.dirpath) | ||
682 | if path.startswith(localdirname): | ||
683 | #logger.warn("-- managed: matched path %s with layer %s " % (path, localdirname)) | ||
684 | # we matched the BRLayer, but we need the layer_version that generated this br | ||
685 | for lvo in self.orm_wrapper.layer_version_objects: | ||
686 | if brl.name == lvo.layer.name: | ||
687 | return lvo | ||
688 | |||
689 | #if we get here, we didn't read layers correctly; dump whatever information we have on the error log | ||
690 | logger.error("Could not match layer version for recipe path %s : %s" % (path, self.orm_wrapper.layer_version_objects)) | ||
691 | |||
692 | #mockup the new layer | ||
693 | unknown_layer, created = Layer.objects.get_or_create(name="__FIXME__unidentified_layer", local_path="/", layer_index_url="") | ||
671 | unknown_layer_version_obj, created = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build']) | 694 | unknown_layer_version_obj, created = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build']) |
672 | 695 | ||
673 | return unknown_layer_version_obj | 696 | return unknown_layer_version_obj |