summaryrefslogtreecommitdiffstats
path: root/scripts/combo-layer
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2015-05-08 14:37:30 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-05-09 22:26:45 +0100
commitdcb8f89723f809ceee9dbb0941a2cc5a43400e99 (patch)
treeb2c46b96c0a640109a164726476687eacb8be53e /scripts/combo-layer
parent5179d7cd6e96be560c7177c6024806e12cb074dc (diff)
downloadpoky-dcb8f89723f809ceee9dbb0941a2cc5a43400e99.tar.gz
combo-layer: improve merge commit handling
When the head of a branch is a merge commit, combo-layer did not record that commit as last_revision because it only considers applied patches, and the merge commit never gets applied. This causes problems when the merge commit leads to multiple patches and the commit id that gets recorded only reaches some of these patches. The next run then will try to re-apply the other patches. This special case is now detected and dealt with by bumping last_revision to the branch commit. The behavior where the head is a normal commit is intentionally not changed, because some users might prefer the traditional behavior. (From OE-Core rev: 701bcd52c208f22a9a6c48a11a35bcf1c4e413df) Signed-off-by: Patrick Ohly <patrick.ohly@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/combo-layer')
-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)