diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index c09cfd4b2c..72c020801b 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1204,6 +1204,8 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1204 | 1204 | ||
1205 | self.stampcache = {} | 1205 | self.stampcache = {} |
1206 | 1206 | ||
1207 | initial_covered = self.rq.scenequeue_covered.copy() | ||
1208 | |||
1207 | # Mark initial buildable tasks | 1209 | # Mark initial buildable tasks |
1208 | for task in xrange(self.stats.total): | 1210 | for task in xrange(self.stats.total): |
1209 | self.runq_running.append(0) | 1211 | self.runq_running.append(0) |
@@ -1257,13 +1259,28 @@ class RunQueueExecuteTasks(RunQueueExecute): | |||
1257 | except TypeError: | 1259 | except TypeError: |
1258 | covered_remove = bb.utils.better_eval(call2, locs) | 1260 | covered_remove = bb.utils.better_eval(call2, locs) |
1259 | 1261 | ||
1260 | for task in covered_remove: | 1262 | def removecoveredtask(task): |
1261 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]] | 1263 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[task]] |
1262 | taskname = self.rqdata.runq_task[task] + '_setscene' | 1264 | taskname = self.rqdata.runq_task[task] + '_setscene' |
1263 | bb.build.del_stamp(taskname, self.rqdata.dataCache, fn) | 1265 | bb.build.del_stamp(taskname, self.rqdata.dataCache, fn) |
1264 | logger.debug(1, 'Not skipping task %s due to setsceneverify', task) | ||
1265 | self.rq.scenequeue_covered.remove(task) | 1266 | self.rq.scenequeue_covered.remove(task) |
1266 | 1267 | ||
1268 | toremove = covered_remove | ||
1269 | for task in toremove: | ||
1270 | logger.debug(1, 'Not skipping task %s due to setsceneverify', task) | ||
1271 | while toremove: | ||
1272 | covered_remove = [] | ||
1273 | for task in toremove: | ||
1274 | removecoveredtask(task) | ||
1275 | for deptask in self.rqdata.runq_depends[task]: | ||
1276 | if deptask not in self.rq.scenequeue_covered: | ||
1277 | continue | ||
1278 | if deptask in toremove or deptask in covered_remove or deptask in initial_covered: | ||
1279 | continue | ||
1280 | logger.debug(1, 'Task %s depends on task %s so not skipping' % (task, deptask)) | ||
1281 | covered_remove.append(deptask) | ||
1282 | toremove = covered_remove | ||
1283 | |||
1267 | logger.debug(1, 'Full skip list %s', self.rq.scenequeue_covered) | 1284 | logger.debug(1, 'Full skip list %s', self.rq.scenequeue_covered) |
1268 | 1285 | ||
1269 | event.fire(bb.event.StampUpdate(self.rqdata.target_pairs, self.rqdata.dataCache.stamp), self.cfgData) | 1286 | event.fire(bb.event.StampUpdate(self.rqdata.target_pairs, self.rqdata.dataCache.stamp), self.cfgData) |