diff options
Diffstat (limited to 'bitbake/lib/bb/ui/buildinfohelper.py')
| -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 |
