summaryrefslogtreecommitdiffstats
path: root/scripts/lib/devtool/standard.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/devtool/standard.py')
-rw-r--r--scripts/lib/devtool/standard.py29
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
619def _remove_file_entries(srcuri, filelist): 634def _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),