diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 99 |
1 files changed, 55 insertions, 44 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index d9a67a3167..02160ef4d7 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -73,7 +73,7 @@ def build_tid(mc, fn, taskname): def pending_hash_index(tid, rqdata): (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) pn = rqdata.dataCaches[mc].pkg_fn[taskfn] - h = rqdata.runtaskentries[tid].hash + h = rqdata.runtaskentries[tid].unihash return pn + ":" + "taskname" + h class RunQueueStats: @@ -2299,9 +2299,6 @@ class RunQueueExecute: for tid in changed: if tid not in self.rqdata.runq_setscene_tids: continue - valid = self.rq.validate_hashes(set([tid]), self.cooker.data, None, False) - if not valid: - continue if tid in self.runq_running: continue if tid not in self.pending_migrations: @@ -2358,6 +2355,7 @@ class RunQueueExecute: logger.info("Setscene task %s now valid and being rerun" % tid) self.sqdone = False + update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self) if changed: self.holdoff_need_update = True @@ -2674,64 +2672,77 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): rqdata.init_progress_reporter.next_stage() - multiconfigs = set() + sqdata.multiconfigs = set() for tid in sqdata.sq_revdeps: - multiconfigs.add(mc_from_tid(tid)) + sqdata.multiconfigs.add(mc_from_tid(tid)) if len(sqdata.sq_revdeps[tid]) == 0: sqrq.sq_buildable.add(tid) rqdata.init_progress_reporter.finish() - if rq.hashvalidate: - noexec = [] - stamppresent = [] - tocheck = set() + sqdata.noexec = set() + sqdata.stamppresent = set() + sqdata.valid = set() - for tid in sorted(sqdata.sq_revdeps): - (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) + update_scenequeue_data(sqdata.sq_revdeps, sqdata, rqdata, rq, cooker, stampcache, sqrq) - taskdep = rqdata.dataCaches[mc].task_deps[taskfn] +def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq): - if 'noexec' in taskdep and taskname in taskdep['noexec']: - noexec.append(tid) - sqrq.sq_task_skip(tid) - bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) - continue + tocheck = set() - if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): - logger.debug(2, 'Setscene stamp current for task %s', tid) - stamppresent.append(tid) - sqrq.sq_task_skip(tid) - continue + for tid in sorted(tids): + if tid in sqdata.stamppresent: + sqdata.stamppresent.remove(tid) + if tid in sqdata.valid: + sqdata.valid.remove(tid) - if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): - logger.debug(2, 'Normal stamp current for task %s', tid) - stamppresent.append(tid) - sqrq.sq_task_skip(tid) - continue + (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) - tocheck.add(tid) + taskdep = rqdata.dataCaches[mc].task_deps[taskfn] - valid = rq.validate_hashes(tocheck, cooker.data, len(stamppresent), False) + if 'noexec' in taskdep and taskname in taskdep['noexec']: + sqdata.noexec.add(tid) + sqrq.sq_task_skip(tid) + bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) + continue + + if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): + logger.debug(2, 'Setscene stamp current for task %s', tid) + sqdata.stamppresent.add(tid) + sqrq.sq_task_skip(tid) + continue - valid_new = stamppresent - for v in valid: - valid_new.append(v) + if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): + logger.debug(2, 'Normal stamp current for task %s', tid) + sqdata.stamppresent.add(tid) + sqrq.sq_task_skip(tid) + continue - hashes = {} - for mc in sorted(multiconfigs): - for tid in sorted(sqdata.sq_revdeps): + tocheck.add(tid) + + sqdata.valid |= rq.validate_hashes(tocheck, cooker.data, len(sqdata.stamppresent), False) + + sqdata.hashes = {} + for mc in sorted(sqdata.multiconfigs): + for tid in sorted(sqdata.sq_revdeps): if mc_from_tid(tid) != mc: continue - if tid not in valid_new and tid not in noexec and tid not in sqrq.scenequeue_notcovered: - sqdata.outrightfail.add(tid) + if tid in sqdata.stamppresent: + continue + if tid in sqdata.valid: + continue + if tid in sqdata.noexec: + continue + if tid in sqrq.scenequeue_notcovered: + continue + sqdata.outrightfail.add(tid) - h = pending_hash_index(tid, rqdata) - if h not in hashes: - hashes[h] = tid - else: - sqrq.sq_deferred[tid] = hashes[h] - bb.warn("Deferring %s after %s" % (tid, hashes[h])) + h = pending_hash_index(tid, rqdata) + if h not in sqdata.hashes: + sqdata.hashes[h] = tid + else: + sqrq.sq_deferred[tid] = sqdata.hashes[h] + bb.warn("Deferring %s after %s" % (tid, sqdata.hashes[h])) class TaskFailure(Exception): |