diff options
| -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)) |
