diff options
Diffstat (limited to 'bitbake/lib/bb/siggen.py')
-rw-r--r-- | bitbake/lib/bb/siggen.py | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index c15ba28ead..52e698c469 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
@@ -224,7 +224,7 @@ class SignatureGeneratorBasic(SignatureGenerator): | |||
224 | 224 | ||
225 | if runtime and k in self.taskhash: | 225 | if runtime and k in self.taskhash: |
226 | data['runtaskdeps'] = self.runtaskdeps[k] | 226 | data['runtaskdeps'] = self.runtaskdeps[k] |
227 | data['file_checksum_values'] = self.file_checksum_values[k] | 227 | data['file_checksum_values'] = [(os.path.basename(f), cs) for f,cs in self.file_checksum_values[k].items()] |
228 | data['runtaskhashes'] = {} | 228 | data['runtaskhashes'] = {} |
229 | for dep in data['runtaskdeps']: | 229 | for dep in data['runtaskdeps']: |
230 | data['runtaskhashes'][dep] = self.taskhash[dep] | 230 | data['runtaskhashes'][dep] = self.taskhash[dep] |
@@ -322,6 +322,39 @@ def compare_sigfiles(a, b, recursecb = None): | |||
322 | removed = sb - sa | 322 | removed = sb - sa |
323 | return changed, added, removed | 323 | return changed, added, removed |
324 | 324 | ||
325 | def file_checksums_diff(a, b): | ||
326 | from collections import Counter | ||
327 | # Handle old siginfo format | ||
328 | if isinstance(a, dict): | ||
329 | a = [(os.path.basename(f), cs) for f, cs in a.items()] | ||
330 | if isinstance(b, dict): | ||
331 | b = [(os.path.basename(f), cs) for f, cs in b.items()] | ||
332 | # Compare lists, ensuring we can handle duplicate filenames if they exist | ||
333 | removedcount = Counter(a) | ||
334 | removedcount.subtract(b) | ||
335 | addedcount = Counter(b) | ||
336 | addedcount.subtract(a) | ||
337 | added = [] | ||
338 | for x in b: | ||
339 | if addedcount[x] > 0: | ||
340 | addedcount[x] -= 1 | ||
341 | added.append(x) | ||
342 | removed = [] | ||
343 | changed = [] | ||
344 | for x in a: | ||
345 | if removedcount[x] > 0: | ||
346 | removedcount[x] -= 1 | ||
347 | for y in added: | ||
348 | if y[0] == x[0]: | ||
349 | changed.append((x[0], x[1], y[1])) | ||
350 | added.remove(y) | ||
351 | break | ||
352 | else: | ||
353 | removed.append(x) | ||
354 | added = [x[0] for x in added] | ||
355 | removed = [x[0] for x in removed] | ||
356 | return changed, added, removed | ||
357 | |||
325 | if 'basewhitelist' in a_data and a_data['basewhitelist'] != b_data['basewhitelist']: | 358 | if 'basewhitelist' in a_data and a_data['basewhitelist'] != b_data['basewhitelist']: |
326 | output.append("basewhitelist changed from '%s' to '%s'" % (a_data['basewhitelist'], b_data['basewhitelist'])) | 359 | output.append("basewhitelist changed from '%s' to '%s'" % (a_data['basewhitelist'], b_data['basewhitelist'])) |
327 | if a_data['basewhitelist'] and b_data['basewhitelist']: | 360 | if a_data['basewhitelist'] and b_data['basewhitelist']: |
@@ -357,10 +390,10 @@ def compare_sigfiles(a, b, recursecb = None): | |||
357 | for dep in changed: | 390 | for dep in changed: |
358 | output.append("Variable %s value changed from '%s' to '%s'" % (dep, a_data['varvals'][dep], b_data['varvals'][dep])) | 391 | output.append("Variable %s value changed from '%s' to '%s'" % (dep, a_data['varvals'][dep], b_data['varvals'][dep])) |
359 | 392 | ||
360 | changed, added, removed = dict_diff(a_data['file_checksum_values'], b_data['file_checksum_values']) | 393 | changed, added, removed = file_checksums_diff(a_data['file_checksum_values'], b_data['file_checksum_values']) |
361 | if changed: | 394 | if changed: |
362 | for f in changed: | 395 | for f, old, new in changed: |
363 | output.append("Checksum for file %s changed from %s to %s" % (f, a_data['file_checksum_values'][f], b_data['file_checksum_values'][f])) | 396 | output.append("Checksum for file %s changed from %s to %s" % (f, old, new)) |
364 | if added: | 397 | if added: |
365 | for f in added: | 398 | for f in added: |
366 | output.append("Dependency on checksum of file %s was added" % (f)) | 399 | output.append("Dependency on checksum of file %s was added" % (f)) |