summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/combo-layer27
1 files changed, 24 insertions, 3 deletions
diff --git a/scripts/combo-layer b/scripts/combo-layer
index 5d61fb1c16..b0b7c28bea 100755
--- a/scripts/combo-layer
+++ b/scripts/combo-layer
@@ -731,6 +731,10 @@ def apply_patchlist(conf, repos):
731 if line: 731 if line:
732 patchlist.append(line) 732 patchlist.append(line)
733 733
734 ldir = conf.repos[name]['local_repo_dir']
735 branch = conf.repos[name].get('branch', "master")
736 branchrev = runcmd("git rev-parse %s" % branch, ldir).strip()
737
734 if patchlist: 738 if patchlist:
735 logger.info("Applying patches from %s..." % name) 739 logger.info("Applying patches from %s..." % name)
736 linecount = len(patchlist) 740 linecount = len(patchlist)
@@ -758,11 +762,28 @@ def apply_patchlist(conf, repos):
758 sys.exit(0) 762 sys.exit(0)
759 prevrev = lastrev 763 prevrev = lastrev
760 i += 1 764 i += 1
765 # Once all patches are applied, we should update
766 # last_revision to the branch head instead of the last
767 # applied patch. The two are not necessarily the same when
768 # the last commit is a merge commit or when the patches at
769 # the branch head were intentionally excluded.
770 #
771 # If we do not do that for a merge commit, the next
772 # combo-layer run will only exclude patches reachable from
773 # one of the merged branches and try to re-apply patches
774 # from other branches even though they were already
775 # copied.
776 #
777 # If patches were intentionally excluded, the next run will
778 # present them again instead of skipping over them. This
779 # may or may not be intended, so the code here is conservative
780 # and only addresses the "head is merge commit" case.
781 if lastrev != branchrev and \
782 len(runcmd("git show --pretty=format:%%P --no-patch %s" % branch, ldir).split()) > 1:
783 lastrev = branchrev
761 else: 784 else:
762 logger.info("No patches to apply from %s" % name) 785 logger.info("No patches to apply from %s" % name)
763 ldir = conf.repos[name]['local_repo_dir'] 786 lastrev = branchrev
764 branch = conf.repos[name].get('branch', "master")
765 lastrev = runcmd("git rev-parse %s" % branch, ldir).strip()
766 787
767 if lastrev != repo['last_revision']: 788 if lastrev != repo['last_revision']:
768 conf.update(name, "last_revision", lastrev) 789 conf.update(name, "last_revision", lastrev)