From c072fa8400002326027557c454a0563acc9ea3b1 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Mon, 18 Jun 2012 16:45:36 +0100 Subject: bitbake: bitbake: add -C option to invalidate a task and rebuild the target This new command line option forces the specified task and all dependent tasks up to the default task to re-run. This means that the following single step: bitbake -C compile somerecipe is equivalent to the following two steps (with the recent change to -f): bitbake -c compile -f somerecipe bitbake somerecipe Note that to work this option needs full hashing enabled (i.e. BB_SIGNATURE_HANDLER must be set to a signature handler that inherits from BasicHash). If this is not the case, -C effectively does nothing. Based on a previous implementation of this option by Jason Wessel . Implements [YOCTO #2615]. (Bitbake rev: 2530e0faada5775897cfd1b93aba6925826dca73) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- bitbake/lib/bb/runqueue.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'bitbake/lib/bb') diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 28eb072bee..608aff8ad7 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -705,11 +705,27 @@ class RunQueueData: continue self.runq_setscene.append(task) + def invalidate_task(fn, taskname, error_nostamp): + taskdep = self.dataCache.task_deps[fn] + if 'nostamp' in taskdep and taskname in taskdep['nostamp']: + if error_nostamp: + bb.fatal("Task %s is marked nostamp, cannot invalidate this task" % taskname) + else: + bb.debug(1, "Task %s is marked nostamp, cannot invalidate this task" % taskname) + else: + logger.verbose("Invalidate task %s, %s", taskname, fn) + bb.parse.siggen.invalidate_task(taskname, self.dataCache, fn) + # Invalidate task if force mode active if self.cooker.configuration.force: for (fn, target) in self.target_pairs: - logger.verbose("Invalidate task %s, %s", target, fn) - bb.parse.siggen.invalidate_task(target, self.dataCache, fn) + invalidate_task(fn, target, False) + + # Invalidate task if invalidate mode active + if self.cooker.configuration.invalidate_stamp: + for (fn, target) in self.target_pairs: + for st in self.cooker.configuration.invalidate_stamp.split(','): + invalidate_task(fn, "do_%s" % st, True) # Interate over the task list and call into the siggen code dealtwith = set() -- cgit v1.2.3-54-g00ecf