[gnome-continuous-yocto/gnomeostree-3.28-rocko: 4525/8267] bitbake: lib/bb/build: add tasksbetween() function



commit d01b4bd15b94aca8344dd32517d7a4153637b025
Author: Paul Eggleton <paul eggleton linux intel com>
Date:   Tue Feb 7 09:08:49 2017 +1300

    bitbake: lib/bb/build: add tasksbetween() function
    
    Add a utility function that gives the list of dependent tasks between
    two specified tasks (just within the same recipe). This is intended to
    be able to be executed from recipe context so it uses the datastore
    rather than having access to the runqueue.
    
    This will be used in OpenEmbedded-Core's populate_sdk_ext.bbclass to
    get the list of tasks between do_image_complete and do_build.
    
    (Bitbake rev: 433379bf12cf31fdf46defdf66695cf8be9994b1)
    
    Signed-off-by: Paul Eggleton <paul eggleton linux intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 bitbake/lib/bb/build.py |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index c08ef89..0d0100a 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -878,3 +878,30 @@ def preceedtask(task, with_recrdeptasks, d):
         if recrdeptask:
             preceed.update(recrdeptask.split())
     return preceed
+
+def tasksbetween(task_start, task_end, d):
+    """
+    Return the list of tasks between two tasks in the current recipe,
+    where task_start is to start at and task_end is the task to end at
+    (and task_end has a dependency chain back to task_start).
+    """
+    outtasks = []
+    tasks = list(filter(lambda k: d.getVarFlag(k, "task"), d.keys()))
+    def follow_chain(task, endtask, chain=None):
+        if not chain:
+            chain = []
+        chain.append(task)
+        for othertask in tasks:
+            if othertask == task:
+                continue
+            if task == endtask:
+                for ctask in chain:
+                    if ctask not in outtasks:
+                        outtasks.append(ctask)
+            else:
+                deps = d.getVarFlag(othertask, 'deps', False)
+                if task in deps:
+                    follow_chain(othertask, endtask, chain)
+        chain.pop()
+    follow_chain(task_start, task_end)
+    return outtasks


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]