[gnome-continuous-yocto/gnomeostree-3.28-rocko: 1298/8267] bitbake: buildinfohelper: fix retrieval of targets



commit f39ae146eadf92f650ed6340158e780a65d483b1
Author: Elliot Smith <elliot smith intel com>
Date:   Tue Jul 12 15:54:47 2016 -0700

    bitbake: buildinfohelper: fix retrieval of targets
    
    When buildinfohelper records the targets for a build, it looks
    up any existing targets for a build and creates them if they
    are not present. This is because in the case of Toaster-triggered
    builds, the Target objects have already been created (inside
    triggerBuild()) and don't need to be recreated; but in the case
    of cli builds, the Target objects have to be created by
    buildinfohelper.
    
    The issue is that the code for retrieving an existing target for
    a build only looks for Targets with a matching target and build,
    e.g. Targets for build X with target "core-image-minimal". But it
    is perfectly legitimate to call bitbake with a command like
    "bitbake core-image-minimal:do_populate_sdk
    core-image-minimal:do_populate_sdk_ext". In such a case, the
    code which looks for matching targets finds two objects, as it
    doesn't filter by task.
    
    Add the task into the filter for the Target so that only one
    Target object is be returned. Note that a command
    line like "bitbake recipe:task recipe:task" will still cause an
    error as bitbake doesn't de-duplicate the command line arguments
    and will run the recipe:task combination twice.
    
    (Bitbake rev: 1c0a689fdaae6469d4afb98583161073d32ea50b)
    
    Signed-off-by: Elliot Smith <elliot smith intel com>
    Signed-off-by: bavery <brian avery intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 bitbake/lib/bb/ui/buildinfohelper.py |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index a5b2237..e1b59c3 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -201,6 +201,10 @@ class ORMWrapper(object):
 
     @staticmethod
     def get_or_create_targets(target_info):
+        """
+        NB get_or_create() is used here because for Toaster-triggered builds,
+        we already created the targets when the build was triggered.
+        """
         result = []
         for target in target_info['targets']:
             task = ''
@@ -210,13 +214,10 @@ class ORMWrapper(object):
                 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()
+
+            obj, _ = Target.objects.get_or_create(build=target_info['build'],
+                                                  target=target,
+                                                  task=task)
             result.append(obj)
         return result
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]