WIP fix unidentified layer and try to stop the buildinfohelper and localhostbecontroller from getting confused between non layers and the toaster-custom-images layer --- bitbake/lib/bb/ui/buildinfohelper.py | 11 ++---- .../toaster/bldcontrol/localhostbecontroller.py | 44 +++++++++++++++------- bitbake/lib/toaster/orm/models.py | 3 +- bitbake/lib/toaster/toastergui/api.py | 4 +- 4 files changed, 39 insertions(+), 23 deletions(-)
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index 5b69660..82e38ae 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py @@ -42,7 +42,7 @@ from orm.models import Variable, VariableHistory from orm.models import Package, Package_File, Target_Installed_Package, Target_File from orm.models import Task_Dependency, Package_Dependency from orm.models import Recipe_Dependency, Provides -from orm.models import Project, CustomImagePackage, CustomImageRecipe +from orm.models import Project, CustomImagePackage from orm.models import signal_runbuilds from bldcontrol.models import BuildEnvironment, BuildRequest @@ -361,11 +361,6 @@ class ORMWrapper(object): def get_update_layer_version_object(self, build_obj, layer_obj, layer_version_information): if isinstance(layer_obj, Layer_Version): - # Special case the toaster-custom-images layer which is created - # on the fly so don't update the values which may cause the layer - # to be duplicated on a future get_or_create - if layer_obj.layer.name == CustomImageRecipe.LAYER_NAME: - return layer_obj # We already found our layer version for this build so just # update it with the new build information logger.debug("We found our layer from toaster") @@ -629,6 +624,8 @@ class ORMWrapper(object): recipe = self._cached_get( Recipe, name=built_recipe.name, + layer_version__layer__name= + built_recipe.layer_version.layer.name, layer_version__build=None, layer_version__release= built_recipe.layer_version.release, @@ -637,7 +634,7 @@ class ORMWrapper(object): ) except (Recipe.DoesNotExist, Recipe.MultipleObjectsReturned) as e: - logger.info("We did not find one recipe for the" + logger.info("We did not find one recipe for the " "configuration data package %s %s" % (p, e)) continue diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py index a64e89b..50c0b5d 100644 --- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py +++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py @@ -198,8 +198,6 @@ class LocalhostBEController(BuildEnvironmentController): if name != "bitbake": layerlist.append(localdirpath.rstrip("/")) - logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist)) - # 5. create custom layer and add custom recipes to it layerpath = os.path.join(self.be.builddir, CustomImageRecipe.LAYER_NAME) @@ -222,19 +220,35 @@ class LocalhostBEController(BuildEnvironmentController): with open(config, "w") as conf: conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n') + BRLayer.objects.get_or_create(req=target.req, + name=layer.name, + dirpath=layerpath, + giturl="file://%s" % layerpath) + # Update the Layer_Version dirpath that has our base_recipe in # to be able to read the base recipe to then generate the # custom recipe. + logger.info(customrecipe.base_recipe.layer_version) + br_layer_base_recipe = layers.get( layer_version=customrecipe.base_recipe.layer_version) - br_layer_base_dirpath = \ - os.path.join(self.be.sourcedir, - self.getGitCloneDirectory( - br_layer_base_recipe.giturl, - br_layer_base_recipe.commit), - customrecipe.base_recipe.layer_version.dirpath - ) + # If the layer is one that we've cloned we know where it lives + if br_layer_base_recipe.giturl and br_layer_base_recipe.commit: + layer_path = self.getGitCloneDirectory( + br_layer_base_recipe.giturl, + br_layer_base_recipe.commit) + # Otherwise it's a local layer + elif br_layer_base_recipe.local_source_dir: + layer_path = br_layer_base_recipe.local_source_dir + else: + logger.error("Unable to workout the dir path for the custom" + " image recipe") + + br_layer_base_dirpath = os.path.join( + self.be.sourcedir, + layer_path, + customrecipe.base_recipe.layer_version.dirpath) customrecipe.base_recipe.layer_version.dirpath = \ br_layer_base_dirpath @@ -249,21 +263,25 @@ class LocalhostBEController(BuildEnvironmentController): # Update the layer and recipe objects customrecipe.layer_version.dirpath = layerpath + customrecipe.layer_version.layer.local_source_dir = layerpath + customrecipe.layer_version.layer.save() customrecipe.layer_version.save() customrecipe.file_path = recipe_path customrecipe.save() # create *Layer* objects needed for build machinery to work - BRLayer.objects.get_or_create(req=target.req, - name=layer.name, - dirpath=layerpath, - giturl="file://%s" % layerpath) + + + nongitlayerlist.append(layerpath) + if os.path.isdir(layerpath): layerlist.append(layerpath) self.islayerset = True layerlist.extend(nongitlayerlist) + + logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist)) return layerlist def readServerLogFile(self): diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index a7de57c..2c1edc9 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py @@ -1631,7 +1631,8 @@ class CustomImageRecipe(Recipe): if base_recipe_path: base_recipe = open(base_recipe_path, 'r').read() else: - raise IOError("Based on recipe file not found") + raise IOError("Based on recipe file not found: %s" % + base_recipe_path) # Add a special case for when the recipe we have based a custom image # recipe on requires another recipe. diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py index ae1f150..e4c3b84 100644 --- a/bitbake/lib/toaster/toastergui/api.py +++ b/bitbake/lib/toaster/toastergui/api.py @@ -293,8 +293,7 @@ class XhrCustomRecipe(View): # create layer 'Custom layer' and verion if needed layer = Layer.objects.get_or_create( name=CustomImageRecipe.LAYER_NAME, - summary="Layer for custom recipes", - vcs_url="file:///toaster_created_layer")[0] + summary="Layer for custom recipes")[0] # Check if we have a layer version already # We don't use get_or_create here because the dirpath will change @@ -306,6 +305,7 @@ class XhrCustomRecipe(View): lver, created = Layer_Version.objects.get_or_create( project=params['project'], layer=layer, + layer_source=LayerSource.TYPE_LOCAL, dirpath="toaster_created_layer") # Add a dependency on our layer to the base recipe's layer -- 2.7.4 -- _______________________________________________ toaster mailing list toaster@yoctoproject.org https://lists.yoctoproject.org/listinfo/toaster