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
[email protected]
https://lists.yoctoproject.org/listinfo/toaster