diff options
Diffstat (limited to 'bitbake/lib/bb/siggen.py')
-rw-r--r-- | bitbake/lib/bb/siggen.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index 8c79b178fb..4a0af94b45 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py @@ -50,6 +50,10 @@ class SignatureGenerator(object): def dump_sigtask(self, fn, task, stampbase, runtime): return + def invalidate_task(self, task, d, fn): + bb.build.del_stamp(task, d, fn) + + class SignatureGeneratorBasic(SignatureGenerator): """ """ @@ -148,6 +152,15 @@ class SignatureGeneratorBasic(SignatureGenerator): return False return True + def read_taint(self, fn, task, stampbase): + taint = None + try: + with open(stampbase + '.' + task + '.taint', 'r') as taintf: + taint = taintf.read() + except IOError: + pass + return taint + def get_taskhash(self, fn, task, deps, dataCache): k = fn + "." + task data = dataCache.basetaskhash[k] @@ -161,6 +174,11 @@ class SignatureGeneratorBasic(SignatureGenerator): bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep) data = data + self.taskhash[dep] self.runtaskdeps[k].append(dep) + + taint = self.read_taint(fn, task, dataCache.stamp[fn]) + if taint: + data = data + taint + h = hashlib.md5(data).hexdigest() self.taskhash[k] = h #d.setVar("BB_TASKHASH_task-%s" % task, taskhash[task]) @@ -201,9 +219,14 @@ class SignatureGeneratorBasic(SignatureGenerator): for dep in data['runtaskdeps']: data['runtaskhashes'][dep] = self.taskhash[dep] + taint = self.read_taint(fn, task, stampbase) + if taint: + data['taint'] = taint + p = pickle.Pickler(file(sigfile, "wb"), -1) p.dump(data) + def dump_sigs(self, dataCache): for fn in self.taskdeps: for task in self.taskdeps[fn]: @@ -230,6 +253,9 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic): h = self.basehash[k] return ("%s.%s.%s.%s" % (stampbase, taskname, h, extrainfo)).rstrip('.') + def invalidate_task(self, task, d, fn): + bb.build.write_taint(task, d, fn) + def dump_this_task(outfile, d): import bb.parse fn = d.getVar("BB_FILENAME", True) @@ -330,6 +356,11 @@ def compare_sigfiles(a, b): for dep in changed: print "Hash for dependent task %s changed from %s to %s" % (dep, a[dep], b[dep]) + a_taint = a_data.get('taint', None) + b_taint = b_data.get('taint', None) + if a_taint != b_taint: + print "Taint (by forced/invalidated task) changed from %s to %s" % (a_taint, b_taint) + def dump_sigfile(a): p1 = pickle.Unpickler(file(a, "rb")) a_data = p1.load() @@ -354,3 +385,6 @@ def dump_sigfile(a): if 'runtaskhashes' in a_data: for dep in a_data['runtaskhashes']: print "Hash for dependent task %s is %s" % (dep, a_data['runtaskhashes'][dep]) + + if 'taint' in a_data: + print "Tainted (by forced/invalidated task): %s" % a_data['taint'] |