bitbake: toaster: bldcontrol Move CustomImageRecipe file creation into own function

Move the custom image file creation (i.e. create the layer file
structure, conf and recipe file) into it's own function and remove the
creation of the BRLayer as this is done at schedule_build just like all
the other layers.

Fix a bug where the toaster-custom-images layer was always being appened
to the layer list if the directory exists.

(Bitbake rev: 15a42b36c01fccd79e5aa0788dea5640b253982b)

Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Michael Wood 2016-11-24 11:20:03 +00:00 committed by Richard Purdie
parent 6f8df05e6e
commit 5de7f159a1
1 changed files with 75 additions and 69 deletions

View File

@ -201,82 +201,88 @@ class LocalhostBEController(BuildEnvironmentController):
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)
for target in targets:
try:
customrecipe = CustomImageRecipe.objects.get(name=target.target,
project=bitbake.req.project)
customrecipe = CustomImageRecipe.objects.get(
name=target.target,
project=bitbake.req.project)
custom_layer_path = self.setup_custom_image_recipe(
customrecipe, layers)
if os.path.isdir(custom_layer_path):
layerlist.append(custom_layer_path)
except CustomImageRecipe.DoesNotExist:
continue # not a custom recipe, skip
continue # not a custom recipe, skip
# create directory structure
for name in ("conf", "recipes"):
path = os.path.join(layerpath, name)
if not os.path.isdir(path):
os.makedirs(path)
# create layer.oonf
config = os.path.join(layerpath, "conf", "layer.conf")
if not os.path.isfile(config):
with open(config, "w") as conf:
conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
# 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.
br_layer_base_recipe = layers.get(
layer_version=customrecipe.base_recipe.layer_version)
# 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
customrecipe.base_recipe.layer_version.save()
# create recipe
recipe_path = \
os.path.join(layerpath, "recipes", "%s.bb" % target.target)
with open(recipe_path, "w") as recipef:
recipef.write(customrecipe.generate_recipe_file_contents())
# 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)
if os.path.isdir(layerpath):
layerlist.append(layerpath)
self.islayerset = True
layerlist.extend(nongitlayerlist)
logger.debug("\n\nset layers gives this list \n %s" % ''.join(layerlist))
self.islayerset = True
return layerlist
def setup_custom_image_recipe(self, customrecipe, layers):
""" Set up toaster-custom-images layer and recipe files """
layerpath = os.path.join(self.be.builddir,
CustomImageRecipe.LAYER_NAME)
# create directory structure
for name in ("conf", "recipes"):
path = os.path.join(layerpath, name)
if not os.path.isdir(path):
os.makedirs(path)
# create layer.conf
config = os.path.join(layerpath, "conf", "layer.conf")
if not os.path.isfile(config):
with open(config, "w") as conf:
conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
# 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.
br_layer_base_recipe = layers.get(
layer_version=customrecipe.base_recipe.layer_version)
# 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
customrecipe.base_recipe.layer_version.save()
# create recipe
recipe_path = os.path.join(layerpath, "recipes", "%s.bb" %
customrecipe.name)
with open(recipe_path, "w") as recipef:
recipef.write(customrecipe.generate_recipe_file_contents())
# 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()
return layerpath
def readServerLogFile(self):
return open(os.path.join(self.be.builddir, "toaster_server.log"), "r").read()