Patchwork [bitbake-devel,3/3] runqueue.py, build.py: Invalidate setscene tasks based on do_unpack stamps

login
register
mail settings
Submitter Jason Wessel
Date June 14, 2012, 3:16 a.m.
Message ID <1339643761-23149-4-git-send-email-jason.wessel@windriver.com>
Download mbox | patch
Permalink /patch/29811/
State New
Headers show

Comments

Jason Wessel - June 14, 2012, 3:16 a.m.
If you have a fully populated sstate cache and have used it to
execute a build, it is not possible to invalidate repackage
an intermediate build after you have forced a compiled

Example when you have build from a complete sstate cache build:
  bitbake core-image-sato
  bitbake -c patch acl
     *** Make some changes to the C files for experimentation.
  bitbake -f -c compile acl
  bitbake acl

The bitbake will refuse to build the acl package at this
point and instead keep populating it from the sstate.  Using
the cleanstate is no longer a good option because it will
also erase the scratch area.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 lib/bb/build.py    |    8 ++++++++
 lib/bb/runqueue.py |    2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

Patch

diff --git a/lib/bb/build.py b/lib/bb/build.py
index 055d382..9d78764 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -499,6 +499,14 @@  def del_stamp(task, d, file_name = None):
     stamp = stamp_internal(task, d, file_name)
     bb.utils.remove(stamp)
 
+def exists_stamp(task, d, file_name = None):
+    """
+    Removes a stamp for a given task
+    (d can be a data dict or dataCache)
+    """
+    stamp = stamp_internal(task, d, file_name)
+    return os.path.exists(stamp)
+
 def stampfile(taskname, d, file_name = None):
     """
     Return the stamp for a given task
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index f1fabfa..93d36c9 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -730,7 +730,7 @@  class RunQueueData:
             for task in self.runq_setscene:
                 try:
                     fn = self.taskData.fn_index[self.rq.rqdata.runq_fnid[task]]
-                    if (self.cooker.configuration.invalidate_stamp and fn in test_fns):
+                    if bb.build.exists_stamp("do_unpack", self.dataCache, fn) or (self.cooker.configuration.invalidate_stamp and fn in test_fns):
                         logger.debug(2, 'Removing task %s due to invalidated build stamps', task)
                     else:
                         new_setscene.append(task)