diff options
Diffstat (limited to 'scripts/lib')
-rw-r--r-- | scripts/lib/devtool/standard.py | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index 8676e4202f..6ce3144dd0 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py | |||
@@ -605,6 +605,7 @@ def _get_patchset_revs(args, srctree, recipe_path): | |||
605 | commits.append(line.split(':')[-1].strip()) | 605 | commits.append(line.split(':')[-1].strip()) |
606 | 606 | ||
607 | update_rev = initial_rev | 607 | update_rev = initial_rev |
608 | changed_revs = None | ||
608 | if initial_rev: | 609 | if initial_rev: |
609 | # Find first actually changed revision | 610 | # Find first actually changed revision |
610 | stdout, _ = bb.process.run('git rev-list --reverse %s..HEAD' % | 611 | stdout, _ = bb.process.run('git rev-list --reverse %s..HEAD' % |
@@ -614,7 +615,21 @@ def _get_patchset_revs(args, srctree, recipe_path): | |||
614 | if newcommits[i] == commits[i]: | 615 | if newcommits[i] == commits[i]: |
615 | update_rev = commits[i] | 616 | update_rev = commits[i] |
616 | 617 | ||
617 | return initial_rev, update_rev | 618 | try: |
619 | stdout, _ = bb.process.run('git cherry devtool-patched', | ||
620 | cwd=srctree) | ||
621 | except bb.process.ExecutionError as err: | ||
622 | stdout = None | ||
623 | |||
624 | if stdout is not None: | ||
625 | changed_revs = [] | ||
626 | for line in stdout.splitlines(): | ||
627 | if line.startswith('+ '): | ||
628 | rev = line.split()[1] | ||
629 | if rev in newcommits: | ||
630 | changed_revs.append(rev) | ||
631 | |||
632 | return initial_rev, update_rev, changed_revs | ||
618 | 633 | ||
619 | def _remove_file_entries(srcuri, filelist): | 634 | def _remove_file_entries(srcuri, filelist): |
620 | """Remove file:// entries from SRC_URI""" | 635 | """Remove file:// entries from SRC_URI""" |
@@ -835,7 +850,7 @@ def _update_recipe_patch(args, config, srctree, rd, config_data): | |||
835 | raise DevtoolError('unable to find workspace bbappend for recipe %s' % | 850 | raise DevtoolError('unable to find workspace bbappend for recipe %s' % |
836 | args.recipename) | 851 | args.recipename) |
837 | 852 | ||
838 | initial_rev, update_rev = _get_patchset_revs(args, srctree, append) | 853 | initial_rev, update_rev, changed_revs = _get_patchset_revs(args, srctree, append) |
839 | if not initial_rev: | 854 | if not initial_rev: |
840 | raise DevtoolError('Unable to find initial revision - please specify ' | 855 | raise DevtoolError('Unable to find initial revision - please specify ' |
841 | 'it with --initial-rev') | 856 | 'it with --initial-rev') |
@@ -888,8 +903,16 @@ def _update_recipe_patch(args, config, srctree, rd, config_data): | |||
888 | _move_file(os.path.join(local_files_dir, basepath), path) | 903 | _move_file(os.path.join(local_files_dir, basepath), path) |
889 | updatefiles = True | 904 | updatefiles = True |
890 | for basepath, path in upd_p.iteritems(): | 905 | for basepath, path in upd_p.iteritems(): |
906 | patchfn = os.path.join(patches_dir, basepath) | ||
907 | if changed_revs is not None: | ||
908 | # Avoid updating patches that have not actually changed | ||
909 | with open(patchfn, 'r') as f: | ||
910 | firstlineitems = f.readline().split() | ||
911 | if len(firstlineitems) > 1 and len(firstlineitems[1]) == 40: | ||
912 | if not firstlineitems[1] in changed_revs: | ||
913 | continue | ||
891 | logger.info('Updating patch %s' % basepath) | 914 | logger.info('Updating patch %s' % basepath) |
892 | _move_file(os.path.join(patches_dir, basepath), path) | 915 | _move_file(patchfn, path) |
893 | updatefiles = True | 916 | updatefiles = True |
894 | # Add any new files | 917 | # Add any new files |
895 | files_dir = os.path.join(os.path.dirname(recipefile), | 918 | files_dir = os.path.join(os.path.dirname(recipefile), |