summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/build.py
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2012-06-18 16:45:35 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-06-21 13:10:32 +0100
commit5bd11a9bf329217f312076f347b045b5c09f19b2 (patch)
tree83714e56d5ba70a16cac099af85f7674300b1ba1 /bitbake/lib/bb/build.py
parentabc0bef595bbedf1fea8c6e0b1dc0c0becdd5b17 (diff)
downloadpoky-5bd11a9bf329217f312076f347b045b5c09f19b2.tar.gz
bitbake: bitbake: ensure -f causes dependent tasks to be re-run
If -f is specified, force dependent tasks to be re-run next time. This works by changing the force behaviour so that instead of deleting the task's stamp, we write a "taint" file into the stamps directory, which will alter the taskhash randomly and thus trigger the task to re-run next time we evaluate whether or not that should be done as well as influencing the taskhashes of any dependent tasks so that they are similarly re-triggered. As a bonus because we write this file as <stamp file name>.taskname.taint, the existing code which deletes the stamp files in OE's do_clean will already handle removing it. This means you can now do the following: bitbake somepackage [ change the source code in the package's WORKDIR ] bitbake -c compile -f somepackage bitbake somepackage and the result will be that all of the tasks that depend on do_compile (do_install, do_package, etc.) will be re-run in the last step. Note that to operate in the manner described above you need 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, -f will just delete the stamp for the specified task as it did before. This fix is required for [YOCTO #2615] and [YOCTO #2256]. (Bitbake rev: f7b55a94226f9acd985f87946e26d01bd86a35bb) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/build.py')
-rw-r--r--bitbake/lib/bb/build.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index a9ba02d34f..a0a7dd4e12 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -494,6 +494,24 @@ def del_stamp(task, d, file_name = None):
494 stamp = stamp_internal(task, d, file_name) 494 stamp = stamp_internal(task, d, file_name)
495 bb.utils.remove(stamp) 495 bb.utils.remove(stamp)
496 496
497def write_taint(task, d, file_name = None):
498 """
499 Creates a "taint" file which will force the specified task and its
500 dependents to be re-run the next time by influencing the value of its
501 taskhash.
502 (d can be a data dict or dataCache)
503 """
504 import uuid
505 if file_name:
506 taintfn = d.stamp[file_name] + '.' + task + '.taint'
507 else:
508 taintfn = d.getVar('STAMP', True) + '.' + task + '.taint'
509 bb.utils.mkdirhier(os.path.dirname(taintfn))
510 # The specific content of the taint file is not really important,
511 # we just need it to be random, so a random UUID is used
512 with open(taintfn, 'w') as taintf:
513 taintf.write(str(uuid.uuid4()))
514
497def stampfile(taskname, d, file_name = None): 515def stampfile(taskname, d, file_name = None):
498 """ 516 """
499 Return the stamp for a given task 517 Return the stamp for a given task