From 9881c532c8b1250a6851da2d2290dadc7ae6ef69 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 17 Jul 2019 22:46:12 +0100 Subject: bitbake: runqueue: Fix non setscene tasks targets being lost If you specify both setscene and non-setscene tasks on the commandline, the non-setscene tasks could be missed, e.g. "bitbake X:do_patch X:do_populate_sysroot" and do_patch would fail to run. Fix the problem in runqueue and add a testcase. (Bitbake rev: 75292fdec5d9c0b5b3c554c4b7474a63656f7e12) Signed-off-by: Richard Purdie --- bitbake/lib/bb/runqueue.py | 10 +++++++++- bitbake/lib/bb/tests/runqueue.py | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index fa848326d8..6a2de240cc 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -2167,7 +2167,6 @@ class RunQueueExecute: return taskdepdata def scenequeue_process_notcovered(self, task): - logger.debug(1, 'Not skipping setscene task %s', task) if len(self.rqdata.runtaskentries[task].depends) == 0: self.setbuildable(task) notcovered = set([task]) @@ -2233,6 +2232,7 @@ class RunQueueExecute: self.scenequeue_process_unskippable(task) if task in self.scenequeue_notcovered: + logger.debug(1, 'Not skipping setscene task %s', task) self.scenequeue_process_notcovered(task) elif task in self.scenequeue_covered: logger.debug(1, 'Queued setscene task %s', task) @@ -2243,6 +2243,14 @@ class RunQueueExecute: logger.debug(1, 'Processing setscene task %s', task) covered = self.sqdata.sq_covered_tasks[task] covered.add(task) + + # If a task is in target_tids and isn't a setscene task, we can't skip it. + cantskip = covered.intersection(self.rqdata.target_tids).difference(self.rqdata.runq_setscene_tids) + for tid in cantskip: + self.tasks_notcovered.add(tid) + self.scenequeue_process_notcovered(tid) + covered.difference_update(cantskip) + # Remove notcovered tasks covered.difference_update(self.tasks_notcovered) self.tasks_covered.update(covered) diff --git a/bitbake/lib/bb/tests/runqueue.py b/bitbake/lib/bb/tests/runqueue.py index f0cea6483f..f22ad4bd81 100644 --- a/bitbake/lib/bb/tests/runqueue.py +++ b/bitbake/lib/bb/tests/runqueue.py @@ -97,6 +97,15 @@ class RunQueueTests(unittest.TestCase): expected = ['a1:fetch', 'a1:unpack', 'a1:patch'] self.assertEqual(set(tasks), set(expected)) + def test_mix_covered_notcovered(self): + with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: + cmd = ["bitbake", "a1:do_patch", "a1:do_populate_sysroot"] + sstatevalid = self.a1_sstatevalid + tasks = self.run_bitbakecmd(cmd, tempdir, sstatevalid) + expected = ['a1:fetch', 'a1:unpack', 'a1:patch', 'a1:populate_sysroot_setscene'] + self.assertEqual(set(tasks), set(expected)) + + # Test targets with intermediate setscene tasks alongside a target with no intermediate setscene tasks def test_mixed_direct_tasks_setscene_tasks(self): with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir: -- cgit 1.2.3-korg