diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/siggen.py | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index c6b14c2942..3c5d86247c 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
@@ -375,7 +375,7 @@ def clean_basepaths_list(a): | |||
375 | b.append(clean_basepath(x)) | 375 | b.append(clean_basepath(x)) |
376 | return b | 376 | return b |
377 | 377 | ||
378 | def compare_sigfiles(a, b, recursecb = None): | 378 | def compare_sigfiles(a, b, recursecb=None, collapsed=False): |
379 | output = [] | 379 | output = [] |
380 | 380 | ||
381 | with open(a, 'rb') as f: | 381 | with open(a, 'rb') as f: |
@@ -443,7 +443,7 @@ def compare_sigfiles(a, b, recursecb = None): | |||
443 | if a_data['taskdeps'] != b_data['taskdeps']: | 443 | if a_data['taskdeps'] != b_data['taskdeps']: |
444 | output.append("Task dependencies changed from:\n%s\nto:\n%s" % (sorted(a_data['taskdeps']), sorted(b_data['taskdeps']))) | 444 | output.append("Task dependencies changed from:\n%s\nto:\n%s" % (sorted(a_data['taskdeps']), sorted(b_data['taskdeps']))) |
445 | 445 | ||
446 | if a_data['basehash'] != b_data['basehash']: | 446 | if a_data['basehash'] != b_data['basehash'] and not collapsed: |
447 | output.append("basehash changed from %s to %s" % (a_data['basehash'], b_data['basehash'])) | 447 | output.append("basehash changed from %s to %s" % (a_data['basehash'], b_data['basehash'])) |
448 | 448 | ||
449 | changed, added, removed = dict_diff(a_data['gendeps'], b_data['gendeps'], a_data['basewhitelist'] & b_data['basewhitelist']) | 449 | changed, added, removed = dict_diff(a_data['gendeps'], b_data['gendeps'], a_data['basewhitelist'] & b_data['basewhitelist']) |
@@ -495,24 +495,25 @@ def compare_sigfiles(a, b, recursecb = None): | |||
495 | if not 'runtaskdeps' in b_data: | 495 | if not 'runtaskdeps' in b_data: |
496 | b_data['runtaskdeps'] = {} | 496 | b_data['runtaskdeps'] = {} |
497 | 497 | ||
498 | if len(a_data['runtaskdeps']) != len(b_data['runtaskdeps']): | 498 | if not collapsed: |
499 | changed = ["Number of task dependencies changed"] | 499 | if len(a_data['runtaskdeps']) != len(b_data['runtaskdeps']): |
500 | else: | 500 | changed = ["Number of task dependencies changed"] |
501 | changed = [] | ||
502 | for idx, task in enumerate(a_data['runtaskdeps']): | ||
503 | a = a_data['runtaskdeps'][idx] | ||
504 | b = b_data['runtaskdeps'][idx] | ||
505 | if a_data['runtaskhashes'][a] != b_data['runtaskhashes'][b]: | ||
506 | changed.append("%s with hash %s\n changed to\n%s with hash %s" % (a, a_data['runtaskhashes'][a], b, b_data['runtaskhashes'][b])) | ||
507 | |||
508 | if changed: | ||
509 | clean_a = clean_basepaths_list(a_data['runtaskdeps']) | ||
510 | clean_b = clean_basepaths_list(b_data['runtaskdeps']) | ||
511 | if clean_a != clean_b: | ||
512 | output.append("runtaskdeps changed from %s to %s" % (clean_a, clean_b)) | ||
513 | else: | 501 | else: |
514 | output.append("runtaskdeps changed:") | 502 | changed = [] |
515 | output.append("\n".join(changed)) | 503 | for idx, task in enumerate(a_data['runtaskdeps']): |
504 | a = a_data['runtaskdeps'][idx] | ||
505 | b = b_data['runtaskdeps'][idx] | ||
506 | if a_data['runtaskhashes'][a] != b_data['runtaskhashes'][b]: | ||
507 | changed.append("%s with hash %s\n changed to\n%s with hash %s" % (a, a_data['runtaskhashes'][a], b, b_data['runtaskhashes'][b])) | ||
508 | |||
509 | if changed: | ||
510 | clean_a = clean_basepaths_list(a_data['runtaskdeps']) | ||
511 | clean_b = clean_basepaths_list(b_data['runtaskdeps']) | ||
512 | if clean_a != clean_b: | ||
513 | output.append("runtaskdeps changed from %s to %s" % (clean_a, clean_b)) | ||
514 | else: | ||
515 | output.append("runtaskdeps changed:") | ||
516 | output.append("\n".join(changed)) | ||
516 | 517 | ||
517 | if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: | 518 | if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: |
518 | a = a_data['runtaskhashes'] | 519 | a = a_data['runtaskhashes'] |
@@ -540,13 +541,17 @@ def compare_sigfiles(a, b, recursecb = None): | |||
540 | output.append("Dependency on task %s was removed with hash %s" % (clean_basepath(dep), a[dep])) | 541 | output.append("Dependency on task %s was removed with hash %s" % (clean_basepath(dep), a[dep])) |
541 | if changed: | 542 | if changed: |
542 | for dep in changed: | 543 | for dep in changed: |
543 | output.append("Hash for dependent task %s changed from %s to %s" % (clean_basepath(dep), a[dep], b[dep])) | 544 | if not collapsed: |
545 | output.append("Hash for dependent task %s changed from %s to %s" % (clean_basepath(dep), a[dep], b[dep])) | ||
544 | if callable(recursecb): | 546 | if callable(recursecb): |
545 | # If a dependent hash changed, might as well print the line above and then defer to the changes in | ||
546 | # that hash since in all likelyhood, they're the same changes this task also saw. | ||
547 | recout = recursecb(dep, a[dep], b[dep]) | 547 | recout = recursecb(dep, a[dep], b[dep]) |
548 | if recout: | 548 | if recout: |
549 | output = [output[-1]] + recout | 549 | if collapsed: |
550 | output.extend(recout) | ||
551 | else: | ||
552 | # If a dependent hash changed, might as well print the line above and then defer to the changes in | ||
553 | # that hash since in all likelyhood, they're the same changes this task also saw. | ||
554 | output = [output[-1]] + recout | ||
550 | 555 | ||
551 | a_taint = a_data.get('taint', None) | 556 | a_taint = a_data.get('taint', None) |
552 | b_taint = b_data.get('taint', None) | 557 | b_taint = b_data.get('taint', None) |