summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliot Smith <elliot.smith@intel.com>2016-07-12 15:54:47 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-07-19 08:56:51 +0100
commitf39ae146eadf92f650ed6340158e780a65d483b1 (patch)
tree6b0c5d983b034fa662af2c4e87f976ddbf0988e5
parent4125da7763ffc70cc77578c677bb7e5fc7ebaf57 (diff)
downloadpoky-f39ae146eadf92f650ed6340158e780a65d483b1.tar.gz
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>
-rw-r--r--bitbake/lib/bb/ui/buildinfohelper.py15
1 files changed, 8 insertions, 7 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index a5b22379aa..e1b59c3e87 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -201,6 +201,10 @@ class ORMWrapper(object):
201 201
202 @staticmethod 202 @staticmethod
203 def get_or_create_targets(target_info): 203 def get_or_create_targets(target_info):
204 """
205 NB get_or_create() is used here because for Toaster-triggered builds,
206 we already created the targets when the build was triggered.
207 """
204 result = [] 208 result = []
205 for target in target_info['targets']: 209 for target in target_info['targets']:
206 task = '' 210 task = ''
@@ -210,13 +214,10 @@ class ORMWrapper(object):
210 task = task[3:] 214 task = task[3:]
211 if task == 'build': 215 if task == 'build':
212 task = '' 216 task = ''
213 obj, created = Target.objects.get_or_create(build=target_info['build'], 217
214 target=target) 218 obj, _ = Target.objects.get_or_create(build=target_info['build'],
215 if created: 219 target=target,
216 obj.is_image = False 220 task=task)
217 if task:
218 obj.task = task
219 obj.save()
220 result.append(obj) 221 result.append(obj)
221 return result 222 return result
222 223