[Toaster] [PATCH] toaster: buildinfohelper toaster-custom-images layer

Brian Avery avery.brian at gmail.com
Sat Nov 5 12:26:16 PDT 2016


Hi,

I rebased on master and toaster next, but I'm afraid i may be missing a
patch :(
When I hit "create custom image" in the dialog box. th ui hangs and I get
the following error in toaster_web.log:

-----

2016-11-05 12:27:12,854 ERROR Internal Server Error:
/toastergui/xhr_customrecipe/

Traceback (most recent call last):

  File
"/home/bavery/.local/lib/python3.4/site-packages/django/db/models/options.py",
line 552, in get_field

    return self.fields_map[field_name]

KeyError: 'local_source_dir'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File
"/home/bavery/.local/lib/python3.4/site-packages/django/db/models/sql/query.py",
line 1368, in names_to_path

    field = opts.get_field(name)

  File
"/home/bavery/.local/lib/python3.4/site-packages/django/db/models/options.py",
line 554, in get_field

    raise FieldDoesNotExist('%s has no field named %r' % (self.object_name,
field_name))

django.core.exceptions.FieldDoesNotExist: Layer_Version has no field named
'local_source_dir'


During handling of the above exception, another exception occurred:

-----


What did i miss? ,

-b

an intel employee

On Thu, Nov 3, 2016 at 10:24 AM, Michael Wood <michael.g.wood at intel.com>
wrote:

> This fixes the unidentified layers issue by making the
> toaster-custom-images layer a local layer. By doing this we also fix the
> git assumptions made for the local layers which stop recipes and other
> meta data being associated with them. This also removed some of the
> special casing previously needed when we didn't have the concept of a
> local (non git) layer.
>
> [YOCTO #10220]
>
> Signed-off-by: Michael Wood <michael.g.wood at intel.com>
> ---
>  bitbake/lib/bb/ui/buildinfohelper.py               |  7 +-----
>  .../toaster/bldcontrol/localhostbecontroller.py    | 25
> ++++++++++++++++------
>  bitbake/lib/toaster/orm/models.py                  |  3 ++-
>  bitbake/lib/toaster/toastergui/api.py              |  5 +++--
>  4 files changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/
> buildinfohelper.py
> index 5b69660..6d87a4e 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")
> diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> index e5f7c98..7d90999 100644
> --- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> +++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> @@ -228,13 +228,22 @@ class LocalhostBEController(
> BuildEnvironmentController):
>              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,6 +258,8 @@ 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
> diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/
> models.py
> index 4f8510c..dad8246 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..f816fa4 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,8 @@ class XhrCustomRecipe(View):
>                  lver, created = Layer_Version.objects.get_or_create(
>                      project=params['project'],
>                      layer=layer,
> +                    layer_source=LayerSource.TYPE_LOCAL,
> +                    local_source_dir="toaster_created_layer",
>                      dirpath="toaster_created_layer")
>
>              # Add a dependency on our layer to the base recipe's layer
> --
> 2.7.4
>
> --
> _______________________________________________
> toaster mailing list
> toaster at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20161105/63a3b62b/attachment.html>


More information about the toaster mailing list