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): | |||
| 73 | def pending_hash_index(tid, rqdata): | 73 | def pending_hash_index(tid, rqdata): |
| 74 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 74 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
| 75 | pn = rqdata.dataCaches[mc].pkg_fn[taskfn] | 75 | pn = rqdata.dataCaches[mc].pkg_fn[taskfn] |
| 76 | h = rqdata.runtaskentries[tid].hash | 76 | h = rqdata.runtaskentries[tid].unihash |
| 77 | return pn + ":" + "taskname" + h | 77 | return pn + ":" + "taskname" + h |
| 78 | 78 | ||
| 79 | class RunQueueStats: | 79 | class RunQueueStats: |
| @@ -2299,9 +2299,6 @@ class RunQueueExecute: | |||
| 2299 | for tid in changed: | 2299 | for tid in changed: |
| 2300 | if tid not in self.rqdata.runq_setscene_tids: | 2300 | if tid not in self.rqdata.runq_setscene_tids: |
| 2301 | continue | 2301 | continue |
| 2302 | valid = self.rq.validate_hashes(set([tid]), self.cooker.data, None, False) | ||
| 2303 | if not valid: | ||
| 2304 | continue | ||
| 2305 | if tid in self.runq_running: | 2302 | if tid in self.runq_running: |
| 2306 | continue | 2303 | continue |
| 2307 | if tid not in self.pending_migrations: | 2304 | if tid not in self.pending_migrations: |
| @@ -2358,6 +2355,7 @@ class RunQueueExecute: | |||
| 2358 | 2355 | ||
| 2359 | logger.info("Setscene task %s now valid and being rerun" % tid) | 2356 | logger.info("Setscene task %s now valid and being rerun" % tid) |
| 2360 | self.sqdone = False | 2357 | self.sqdone = False |
| 2358 | update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self) | ||
| 2361 | 2359 | ||
| 2362 | if changed: | 2360 | if changed: |
| 2363 | self.holdoff_need_update = True | 2361 | self.holdoff_need_update = True |
| @@ -2674,64 +2672,77 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): | |||
| 2674 | 2672 | ||
| 2675 | rqdata.init_progress_reporter.next_stage() | 2673 | rqdata.init_progress_reporter.next_stage() |
| 2676 | 2674 | ||
| 2677 | multiconfigs = set() | 2675 | sqdata.multiconfigs = set() |
| 2678 | for tid in sqdata.sq_revdeps: | 2676 | for tid in sqdata.sq_revdeps: |
| 2679 | multiconfigs.add(mc_from_tid(tid)) | 2677 | sqdata.multiconfigs.add(mc_from_tid(tid)) |
| 2680 | if len(sqdata.sq_revdeps[tid]) == 0: | 2678 | if len(sqdata.sq_revdeps[tid]) == 0: |
| 2681 | sqrq.sq_buildable.add(tid) | 2679 | sqrq.sq_buildable.add(tid) |
| 2682 | 2680 | ||
| 2683 | rqdata.init_progress_reporter.finish() | 2681 | rqdata.init_progress_reporter.finish() |
| 2684 | 2682 | ||
| 2685 | if rq.hashvalidate: | 2683 | sqdata.noexec = set() |
| 2686 | noexec = [] | 2684 | sqdata.stamppresent = set() |
| 2687 | stamppresent = [] | 2685 | sqdata.valid = set() |
| 2688 | tocheck = set() | ||
| 2689 | 2686 | ||
| 2690 | for tid in sorted(sqdata.sq_revdeps): | 2687 | update_scenequeue_data(sqdata.sq_revdeps, sqdata, rqdata, rq, cooker, stampcache, sqrq) |
| 2691 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | ||
| 2692 | 2688 | ||
| 2693 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] | 2689 | def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq): |
| 2694 | 2690 | ||
| 2695 | if 'noexec' in taskdep and taskname in taskdep['noexec']: | 2691 | tocheck = set() |
| 2696 | noexec.append(tid) | ||
| 2697 | sqrq.sq_task_skip(tid) | ||
| 2698 | bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) | ||
| 2699 | continue | ||
| 2700 | 2692 | ||
| 2701 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): | 2693 | for tid in sorted(tids): |
| 2702 | logger.debug(2, 'Setscene stamp current for task %s', tid) | 2694 | if tid in sqdata.stamppresent: |
| 2703 | stamppresent.append(tid) | 2695 | sqdata.stamppresent.remove(tid) |
| 2704 | sqrq.sq_task_skip(tid) | 2696 | if tid in sqdata.valid: |
| 2705 | continue | 2697 | sqdata.valid.remove(tid) |
| 2706 | 2698 | ||
| 2707 | if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): | 2699 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
| 2708 | logger.debug(2, 'Normal stamp current for task %s', tid) | ||
| 2709 | stamppresent.append(tid) | ||
| 2710 | sqrq.sq_task_skip(tid) | ||
| 2711 | continue | ||
| 2712 | 2700 | ||
| 2713 | tocheck.add(tid) | 2701 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] |
| 2714 | 2702 | ||
| 2715 | valid = rq.validate_hashes(tocheck, cooker.data, len(stamppresent), False) | 2703 | if 'noexec' in taskdep and taskname in taskdep['noexec']: |
| 2704 | sqdata.noexec.add(tid) | ||
| 2705 | sqrq.sq_task_skip(tid) | ||
| 2706 | bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) | ||
| 2707 | continue | ||
| 2708 | |||
| 2709 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): | ||
| 2710 | logger.debug(2, 'Setscene stamp current for task %s', tid) | ||
| 2711 | sqdata.stamppresent.add(tid) | ||
| 2712 | sqrq.sq_task_skip(tid) | ||
| 2713 | continue | ||
| 2716 | 2714 | ||
| 2717 | valid_new = stamppresent | 2715 | if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): |
| 2718 | for v in valid: | 2716 | logger.debug(2, 'Normal stamp current for task %s', tid) |
| 2719 | valid_new.append(v) | 2717 | sqdata.stamppresent.add(tid) |
| 2718 | sqrq.sq_task_skip(tid) | ||
| 2719 | continue | ||
| 2720 | 2720 | ||
| 2721 | hashes = {} | 2721 | tocheck.add(tid) |
| 2722 | for mc in sorted(multiconfigs): | 2722 | |
| 2723 | for tid in sorted(sqdata.sq_revdeps): | 2723 | sqdata.valid |= rq.validate_hashes(tocheck, cooker.data, len(sqdata.stamppresent), False) |
| 2724 | |||
| 2725 | sqdata.hashes = {} | ||
| 2726 | for mc in sorted(sqdata.multiconfigs): | ||
| 2727 | for tid in sorted(sqdata.sq_revdeps): | ||
| 2724 | if mc_from_tid(tid) != mc: | 2728 | if mc_from_tid(tid) != mc: |
| 2725 | continue | 2729 | continue |
| 2726 | if tid not in valid_new and tid not in noexec and tid not in sqrq.scenequeue_notcovered: | 2730 | if tid in sqdata.stamppresent: |
| 2727 | sqdata.outrightfail.add(tid) | 2731 | continue |
| 2732 | if tid in sqdata.valid: | ||
| 2733 | continue | ||
| 2734 | if tid in sqdata.noexec: | ||
| 2735 | continue | ||
| 2736 | if tid in sqrq.scenequeue_notcovered: | ||
| 2737 | continue | ||
| 2738 | sqdata.outrightfail.add(tid) | ||
| 2728 | 2739 | ||
| 2729 | h = pending_hash_index(tid, rqdata) | 2740 | h = pending_hash_index(tid, rqdata) |
| 2730 | if h not in hashes: | 2741 | if h not in sqdata.hashes: |
| 2731 | hashes[h] = tid | 2742 | sqdata.hashes[h] = tid |
| 2732 | else: | 2743 | else: |
| 2733 | sqrq.sq_deferred[tid] = hashes[h] | 2744 | sqrq.sq_deferred[tid] = sqdata.hashes[h] |
| 2734 | bb.warn("Deferring %s after %s" % (tid, hashes[h])) | 2745 | bb.warn("Deferring %s after %s" % (tid, sqdata.hashes[h])) |
| 2735 | 2746 | ||
| 2736 | 2747 | ||
| 2737 | class TaskFailure(Exception): | 2748 | class TaskFailure(Exception): |
