[bitbake-devel,v3] runqueue: add option to run all tasks in specific build target

Submitted by Matthew McClintock on March 8, 2017, 8:24 p.m. | Patch ID: 137901

Details

Message ID 1489004678-31921-1-git-send-email-msm-oss@mcclintock.net
State New
Headers show

Commit Message

Matthew McClintock March 8, 2017, 8:24 p.m.
For example:

$ bitbake core-image-minimal --runall unpack
...
NOTE: Tasks Summary: Attempted 326 tasks of which 88 didn't need to be rerun and all succeeded.

$ bitbake core-image-minimal --runall patch
NOTE: Tasks Summary: Attempted 453 tasks of which 332 didn't need to be rerun and all succeeded.

This can replace fetchall as well:
$ bitbake core-image-minimal --runall fetch
NOTE: Tasks Summary: Attempted 135 tasks of which 119 didn't need to be rerun and all succeeded.

Signed-off-by: Matthew McClintock <msm-oss@mcclintock.net>
---

Notes:
        v2:
    	- removed debug code that was left behind
        v3:
    	- update help message
    	- emit fatal error if no tasks remain after runall filter

 lib/bb/cookerdata.py |  1 +
 lib/bb/main.py       |  3 +++
 lib/bb/runqueue.py   | 17 +++++++++++++++++
 3 files changed, 21 insertions(+)

Patch hide | download patch | download mbox

diff --git a/lib/bb/cookerdata.py b/lib/bb/cookerdata.py
index 53f4587..722d860 100644
--- a/lib/bb/cookerdata.py
+++ b/lib/bb/cookerdata.py
@@ -148,6 +148,7 @@  class CookerConfiguration(object):
         self.writeeventlog = False
         self.server_only = False
         self.limited_deps = False
+        self.runall = None
 
         self.env = {}
 
diff --git a/lib/bb/main.py b/lib/bb/main.py
index 3ff43cf..b3cd2cf 100755
--- a/lib/bb/main.py
+++ b/lib/bb/main.py
@@ -287,6 +287,9 @@  class BitBakeConfigParameters(cookerdata.ConfigParameters):
                           help="Writes the event log of the build to a bitbake event json file. "
                                "Use '' (empty string) to assign the name automatically.")
 
+        parser.add_option("", "--runall", action="store", dest="runall",
+                          help="Run the specified task for all build targets and their dependencies.")
+
         options, targets = parser.parse_args(argv)
 
         if options.quiet and options.verbose:
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index a3b451a..38304d1 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -803,6 +803,23 @@  class RunQueueData:
 
         self.init_progress_reporter.next_stage()
 
+        if self.cooker.configuration.runall is not None:
+            runall = "do_%s" % self.cooker.configuration.runall
+            runall_tids = { k: v for k, v in self.runtaskentries.items() if taskname_from_tid(k) == runall }
+
+            # re-run the mark_active and then drop unused tasks from new list
+            runq_build = {}
+            for tid in list(runall_tids):
+                mark_active(tid,1)
+
+            for tid in list(self.runtaskentries.keys()):
+                if tid not in runq_build:
+                    del self.runtaskentries[tid]
+                    delcount += 1
+
+            if len(self.runtaskentries) == 0:
+                bb.msg.fatal("RunQueue", "No remaining tasks to run run for build target %s with runall %s" % (target, runall))
+
         #
         # Step D - Sanity checks and computation
         #