[Toaster] [review-request][PATCH] toaster: add get_or_create_targets API

Brian Avery avery.brian at gmail.com
Fri Oct 16 10:32:40 PDT 2015


upstreamed and pushed to toaster-next.
-b

On Fri, Oct 16, 2015 at 9:36 AM, Ed Bartosh <ed.bartosh at linux.intel.com> wrote:
> Target objects are created before the build if build is
> started from UI in build mode. However, in analysis mode Target
> objects don't exist and need to be created using information
> from bitbake events.
>
> Added new API call get_or_create_targets to retrive existing
> target objects or create them if they don't exist yet.
>
> Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
> Signed-off-by: Elliot Smith <elliot.smith at intel.com>
> ---
>  bitbake/lib/bb/ui/buildinfohelper.py | 36 +++++++++++++++++++++---------------
>  1 file changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
> index 286fb6a..2fc1a43 100644
> --- a/bitbake/lib/bb/ui/buildinfohelper.py
> +++ b/bitbake/lib/bb/ui/buildinfohelper.py
> @@ -162,8 +162,6 @@ class ORMWrapper(object):
>              build.bitbake_version=build_info['bitbake_version']
>              build.save()
>
> -            Target.objects.filter(build = build).delete()
> -
>          else:
>              build = Build.objects.create(
>                                      project = prj,
> @@ -184,18 +182,26 @@ class ORMWrapper(object):
>
>          return build
>
> -    def create_target_objects(self, target_info):
> -        assert 'build' in target_info
> -        assert 'targets' in target_info
> -
> -        targets = []
> -        for tgt_name in target_info['targets']:
> -            tgt_object = Target.objects.create( build = target_info['build'],
> -                                    target = tgt_name,
> -                                    is_image = False,
> -                                    )
> -            targets.append(tgt_object)
> -        return targets
> +    @staticmethod
> +    def get_or_create_targets(target_info):
> +        result = []
> +        for target in target_info['targets']:
> +            task = ''
> +            if ':' in target:
> +                target, task = target.split(':', 1)
> +            if task.startswith('do_'):
> +                task = task[3:]
> +            if task == 'build':
> +                task = ''
> +            obj, created = Target.objects.get_or_create(build=target_info['build'],
> +                                                        target=target)
> +            if created:
> +                obj.is_image = False
> +                if task:
> +                    obj.task = task
> +                obj.save()
> +            result.append(obj)
> +        return result
>
>      def update_build_object(self, build, errors, warnings, taskfailures):
>          assert isinstance(build,Build)
> @@ -950,7 +956,7 @@ class BuildInfoHelper(object):
>          target_information['targets'] = event._pkgs
>          target_information['build'] = build_obj
>
> -        self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information)
> +        self.internal_state['targets'] = self.orm_wrapper.get_or_create_targets(target_information)
>
>          # Save build configuration
>          data = self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]
> --
> 2.1.4
>
> --
> _______________________________________________
> toaster mailing list
> toaster at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster


More information about the toaster mailing list