From patchwork Fri Jun 8 13:41:49 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel, v4, 14/18] runqueue.py, build.py: Invalidate setscene tasks based on do_unpack stamps Date: Fri, 08 Jun 2012 13:41:49 -0000 From: Jason Wessel X-Patchwork-Id: 29511 Message-Id: <1339162913-23759-15-git-send-email-jason.wessel@windriver.com> To: 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 --- lib/bb/build.py | 8 ++++++++ lib/bb/runqueue.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/bb/build.py b/lib/bb/build.py index fb61b00..18c28aa 100644 --- a/lib/bb/build.py +++ b/lib/bb/build.py @@ -463,6 +463,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 da3fdf9..6c802af 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -718,6 +718,20 @@ class RunQueueData: for dep in self.runq_depends[task]: procdep.append(self.taskData.fn_index[self.runq_fnid[dep]] + "." + self.runq_task[dep]) self.runq_hash[task] = bb.parse.siggen.get_taskhash(self.taskData.fn_index[self.runq_fnid[task]], self.runq_task[task], procdep, self.dataCache) + try: + new_setscene = [] + for task in self.runq_setscene: + try: + fn = self.taskData.fn_index[self.rq.rqdata.runq_fnid[task]] + if bb.build.exists_stamp("do_unpack", self.dataCache, fn): + logger.debug(2, 'Removing task %s from queue because do_unpack exists', task) + else: + new_setscene.append(task) + except: + logger.debug(2, 'Failed do_unpack check for %s', task) + self.runq_setscene = new_setscene + except: + logger.debug(2, 'Failed to update runq_setscene') self.hashes = {} self.hash_deps = {}