[poky] [PATCH 3/5] siggen.py: fix python error when comparing sstate generated from different srcpath
Kevin Tian
kevin.tian at intel.com
Mon Nov 22 06:17:26 PST 2010
So far bitbake-diffsigs is broken when comparing two sstate packages built from
different source directories. The problem is that the key for taskhash contains
full path, such as:
/home/poky/tasks/poky/meta/recipes-kernel/linux/linux-yocto_git.bb.do_patch
This results in a key error when searching in the 2nd package.
To fix that a new key 'srcpath' is introduced, which is literally copied from
OEROOT. This info can then assist above task comparison
Two other small improvements are included too:
- stamp directory may not be created if using "bitbake -S" in a scatch build
- better output about changes on dependent tasks
Signed-off-by: Kevin Tian <kevin.tian at intel.com>
---
bitbake/lib/bb/siggen.py | 24 ++++++++++++++++++------
1 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index 9e956ee..20f57ad 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -47,6 +47,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
self.runtaskdeps = {}
self.gendeps = {}
self.lookupcache = {}
+ self.srcpath = data.getVar("OEROOT", True)
self.basewhitelist = (data.getVar("BB_HASHBASE_WHITELIST", True) or "").split()
self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST", True) or None
@@ -132,8 +133,10 @@ class SignatureGeneratorBasic(SignatureGenerator):
sigfile = stampbase + "." + task + ".sigdata" + "." + self.taskhash[k]
else:
sigfile = stampbase + "." + task + ".sigbasedata" + "." + self.basehash[k]
+ bb.utils.mkdirhier(os.path.dirname(sigfile))
data = {}
+ data['srcpath'] = self.srcpath
data['basewhitelist'] = self.basewhitelist
data['taskwhitelist'] = self.taskwhitelist
data['taskdeps'] = self.taskdeps[fn][task]
@@ -227,13 +230,22 @@ def compare_sigfiles(a, b):
#if removed:
# print "Dependency on Variable %s was removed (value %s)" % (dep, a_data['gendeps'][dep])
- if 'runtaskdeps' in a_data and 'runtaskdeps' in b_data and sorted(a_data['runtaskdeps']) != sorted(b_data['runtaskdeps']):
- print "Tasks this task depends on changed from %s to %s" % (sorted(a_data['runtaskdeps']), sorted(b_data['runtaskdeps']))
-
- if 'runtaskhashes' in a_data:
+ if 'runtaskdeps' in a_data and 'runtaskdeps' in b_data:
+ b_data_new = [dep.replace(b_data['srcpath'], a_data['srcpath']) for dep in b_data['runtaskdeps']]
+ if sorted(a_data['runtaskdeps']) != sorted(b_data_new):
+ print "Tasks this task depends on have been changed:"
+ for dep in a_data['runtaskdeps']:
+ if not dep in b_data_new:
+ print "-- %s" % dep
+ for dep in b_data_new:
+ if not dep in a_data['runtaskdeps']:
+ print "++ %s" % dep.replace(a_data['srcpath'], b_data['srcpath'])
+
+ if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data:
for dep in a_data['runtaskhashes']:
- if a_data['runtaskhashes'][dep] != b_data['runtaskhashes'][dep]:
- print "Hash for dependent task %s changed from %s to %s" % (dep, a_data['runtaskhashes'][dep], b_data['runtaskhashes'][dep])
+ dep_b = dep.replace(a_data['srcpath'], b_data['srcpath'])
+ if dep_b in b_data['runtaskhashes'] and a_data['runtaskhashes'][dep] != b_data['runtaskhashes'][dep_b]:
+ print "Hash for dependent task %s changed from %s to %s" % (dep, a_data['runtaskhashes'][dep], b_data['runtaskhashes'][dep_b])
def dump_sigfile(a):
p1 = pickle.Unpickler(file(a, "rb"))
--
1.6.0.4
More information about the poky
mailing list