diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2012-06-18 16:45:36 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-06-21 13:10:32 +0100 |
commit | c072fa8400002326027557c454a0563acc9ea3b1 (patch) | |
tree | 1c231f3c116f70abf5068f66d3b1acf5567d0c2b | |
parent | 5bd11a9bf329217f312076f347b045b5c09f19b2 (diff) | |
download | poky-c072fa8400002326027557c454a0563acc9ea3b1.tar.gz |
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
<jason.wessel@windriver.com>.
Implements [YOCTO #2615].
(Bitbake rev: 2530e0faada5775897cfd1b93aba6925826dca73)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-x | bitbake/bin/bitbake | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 20 |
2 files changed, 21 insertions, 2 deletions
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index 478ac06124..f23673fdf8 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake | |||
@@ -118,6 +118,9 @@ Default BBFILES are the .bb files in the current directory.""") | |||
118 | parser.add_option("-c", "--cmd", help = "Specify task to execute. Note that this only executes the specified task for the providee and the packages it depends on, i.e. 'compile' does not implicitly call stage for the dependencies (IOW: use only if you know what you are doing). Depending on the base.bbclass a listtasks tasks is defined and will show available tasks", | 118 | parser.add_option("-c", "--cmd", help = "Specify task to execute. Note that this only executes the specified task for the providee and the packages it depends on, i.e. 'compile' does not implicitly call stage for the dependencies (IOW: use only if you know what you are doing). Depending on the base.bbclass a listtasks tasks is defined and will show available tasks", |
119 | action = "store", dest = "cmd") | 119 | action = "store", dest = "cmd") |
120 | 120 | ||
121 | parser.add_option("-C", "--clear-stamp", help = "Invalidate the specified stamp for a task such as 'compile' and run the default task for the specified target(s)", | ||
122 | action = "store", dest = "invalidate_stamp") | ||
123 | |||
121 | parser.add_option("-r", "--read", help = "read the specified file before bitbake.conf", | 124 | parser.add_option("-r", "--read", help = "read the specified file before bitbake.conf", |
122 | action = "append", dest = "prefile", default = []) | 125 | action = "append", dest = "prefile", default = []) |
123 | 126 | ||
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: | |||
705 | continue | 705 | continue |
706 | self.runq_setscene.append(task) | 706 | self.runq_setscene.append(task) |
707 | 707 | ||
708 | def invalidate_task(fn, taskname, error_nostamp): | ||
709 | taskdep = self.dataCache.task_deps[fn] | ||
710 | if 'nostamp' in taskdep and taskname in taskdep['nostamp']: | ||
711 | if error_nostamp: | ||
712 | bb.fatal("Task %s is marked nostamp, cannot invalidate this task" % taskname) | ||
713 | else: | ||
714 | bb.debug(1, "Task %s is marked nostamp, cannot invalidate this task" % taskname) | ||
715 | else: | ||
716 | logger.verbose("Invalidate task %s, %s", taskname, fn) | ||
717 | bb.parse.siggen.invalidate_task(taskname, self.dataCache, fn) | ||
718 | |||
708 | # Invalidate task if force mode active | 719 | # Invalidate task if force mode active |
709 | if self.cooker.configuration.force: | 720 | if self.cooker.configuration.force: |
710 | for (fn, target) in self.target_pairs: | 721 | for (fn, target) in self.target_pairs: |
711 | logger.verbose("Invalidate task %s, %s", target, fn) | 722 | invalidate_task(fn, target, False) |
712 | bb.parse.siggen.invalidate_task(target, self.dataCache, fn) | 723 | |
724 | # Invalidate task if invalidate mode active | ||
725 | if self.cooker.configuration.invalidate_stamp: | ||
726 | for (fn, target) in self.target_pairs: | ||
727 | for st in self.cooker.configuration.invalidate_stamp.split(','): | ||
728 | invalidate_task(fn, "do_%s" % st, True) | ||
713 | 729 | ||
714 | # Interate over the task list and call into the siggen code | 730 | # Interate over the task list and call into the siggen code |
715 | dealtwith = set() | 731 | dealtwith = set() |