diff options
Diffstat (limited to 'bitbake/lib/bb/siggen.py')
-rw-r--r-- | bitbake/lib/bb/siggen.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index 5a0b80e8a9..daf56770f9 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
@@ -60,6 +60,7 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
60 | self.taskhash = {} | 60 | self.taskhash = {} |
61 | self.taskdeps = {} | 61 | self.taskdeps = {} |
62 | self.runtaskdeps = {} | 62 | self.runtaskdeps = {} |
63 | self.file_checksum_values = {} | ||
63 | self.gendeps = {} | 64 | self.gendeps = {} |
64 | self.lookupcache = {} | 65 | self.lookupcache = {} |
65 | self.pkgnameextract = re.compile("(?P<fn>.*)\..*") | 66 | self.pkgnameextract = re.compile("(?P<fn>.*)\..*") |
@@ -152,6 +153,7 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
152 | k = fn + "." + task | 153 | k = fn + "." + task |
153 | data = dataCache.basetaskhash[k] | 154 | data = dataCache.basetaskhash[k] |
154 | self.runtaskdeps[k] = [] | 155 | self.runtaskdeps[k] = [] |
156 | self.file_checksum_values[k] = {} | ||
155 | recipename = dataCache.pkg_fn[fn] | 157 | recipename = dataCache.pkg_fn[fn] |
156 | for dep in sorted(deps, key=clean_basepath): | 158 | for dep in sorted(deps, key=clean_basepath): |
157 | depname = dataCache.pkg_fn[self.pkgnameextract.search(dep).group('fn')] | 159 | depname = dataCache.pkg_fn[self.pkgnameextract.search(dep).group('fn')] |
@@ -161,6 +163,12 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
161 | bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep) | 163 | bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep) |
162 | data = data + self.taskhash[dep] | 164 | data = data + self.taskhash[dep] |
163 | self.runtaskdeps[k].append(dep) | 165 | self.runtaskdeps[k].append(dep) |
166 | |||
167 | if task in dataCache.file_checksums[fn]: | ||
168 | checksums = bb.fetch2.get_file_checksums(dataCache.file_checksums[fn][task], recipename) | ||
169 | for (f,cs) in checksums: | ||
170 | self.file_checksum_values[k][f] = cs | ||
171 | data = data + cs | ||
164 | h = hashlib.md5(data).hexdigest() | 172 | h = hashlib.md5(data).hexdigest() |
165 | self.taskhash[k] = h | 173 | self.taskhash[k] = h |
166 | #d.setVar("BB_TASKHASH_task-%s" % task, taskhash[task]) | 174 | #d.setVar("BB_TASKHASH_task-%s" % task, taskhash[task]) |
@@ -197,6 +205,7 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
197 | 205 | ||
198 | if runtime and k in self.taskhash: | 206 | if runtime and k in self.taskhash: |
199 | data['runtaskdeps'] = self.runtaskdeps[k] | 207 | data['runtaskdeps'] = self.runtaskdeps[k] |
208 | data['file_checksum_values'] = self.file_checksum_values[k] | ||
200 | data['runtaskhashes'] = {} | 209 | data['runtaskhashes'] = {} |
201 | for dep in data['runtaskdeps']: | 210 | for dep in data['runtaskdeps']: |
202 | data['runtaskhashes'][dep] = self.taskhash[dep] | 211 | data['runtaskhashes'][dep] = self.taskhash[dep] |
@@ -304,6 +313,18 @@ def compare_sigfiles(a, b): | |||
304 | for dep in changed: | 313 | for dep in changed: |
305 | print "Variable %s value changed from %s to %s" % (dep, a_data['varvals'][dep], b_data['varvals'][dep]) | 314 | print "Variable %s value changed from %s to %s" % (dep, a_data['varvals'][dep], b_data['varvals'][dep]) |
306 | 315 | ||
316 | changed, added, removed = dict_diff(a_data['file_checksum_values'], b_data['file_checksum_values']) | ||
317 | if changed: | ||
318 | for f in changed: | ||
319 | print "Checksum for file %s changed from %s to %s" % (f, a_data['file_checksum_values'][f], b_data['file_checksum_values'][f]) | ||
320 | if added: | ||
321 | for f in added: | ||
322 | print "Dependency on checksum of file %s was added" % (f) | ||
323 | if removed: | ||
324 | for f in removed: | ||
325 | print "Dependency on checksum of file %s was removed" % (f) | ||
326 | |||
327 | |||
307 | if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: | 328 | if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: |
308 | a = clean_basepaths(a_data['runtaskhashes']) | 329 | a = clean_basepaths(a_data['runtaskhashes']) |
309 | b = clean_basepaths(b_data['runtaskhashes']) | 330 | b = clean_basepaths(b_data['runtaskhashes']) |
@@ -353,6 +374,9 @@ def dump_sigfile(a): | |||
353 | if 'runtaskdeps' in a_data: | 374 | if 'runtaskdeps' in a_data: |
354 | print "Tasks this task depends on: %s" % (a_data['runtaskdeps']) | 375 | print "Tasks this task depends on: %s" % (a_data['runtaskdeps']) |
355 | 376 | ||
377 | if 'file_checksum_values' in a_data: | ||
378 | print "This task depends on the checksums of files: %s" % (a_data['file_checksum_values']) | ||
379 | |||
356 | if 'runtaskhashes' in a_data: | 380 | if 'runtaskhashes' in a_data: |
357 | for dep in a_data['runtaskhashes']: | 381 | for dep in a_data['runtaskhashes']: |
358 | print "Hash for dependent task %s is %s" % (dep, a_data['runtaskhashes'][dep]) | 382 | print "Hash for dependent task %s is %s" % (dep, a_data['runtaskhashes'][dep]) |