diff options
Diffstat (limited to 'zuul/merger/merger.py')
-rw-r--r-- | zuul/merger/merger.py | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/zuul/merger/merger.py b/zuul/merger/merger.py index 34b495fcc..09968eac6 100644 --- a/zuul/merger/merger.py +++ b/zuul/merger/merger.py @@ -582,7 +582,7 @@ class Repo(object): repo.git.merge(*args) return repo.head.commit - def squash_merge(self, item, zuul_event_id=None): + def squashMerge(self, item, zuul_event_id=None): log = get_annotated_logger(self.log, zuul_event_id) repo = self.createRepoObject(zuul_event_id) args = ['--squash', 'FETCH_HEAD'] @@ -594,6 +594,17 @@ class Repo(object): 'Merge change %s,%s' % (item['number'], item['patchset'])) return repo.head.commit + def rebaseMerge(self, item, base, zuul_event_id=None): + log = get_annotated_logger(self.log, zuul_event_id) + repo = self.createRepoObject(zuul_event_id) + args = [base] + ref = item['ref'] + self.fetch(ref, zuul_event_id=zuul_event_id) + log.debug("Rebasing %s with args %s", ref, args) + repo.git.checkout('FETCH_HEAD') + repo.git.rebase(*args) + return repo.head.commit + def fetch(self, ref, zuul_event_id=None): repo = self.createRepoObject(zuul_event_id) # NOTE: The following is currently not applicable, but if we @@ -1029,14 +1040,14 @@ class Merger(object): for message in messages: ref_log.debug(message) - def _mergeChange(self, item, ref, zuul_event_id): + def _mergeChange(self, item, base, zuul_event_id): log = get_annotated_logger(self.log, zuul_event_id) repo = self.getRepo(item['connection'], item['project'], zuul_event_id=zuul_event_id) try: - repo.checkout(ref, zuul_event_id=zuul_event_id) + repo.checkout(base, zuul_event_id=zuul_event_id) except Exception: - log.exception("Unable to checkout %s", ref) + log.exception("Unable to checkout %s", base) return None, None try: @@ -1050,8 +1061,11 @@ class Merger(object): commit = repo.cherryPick(item['ref'], zuul_event_id=zuul_event_id) elif mode == zuul.model.MERGER_SQUASH_MERGE: - commit = repo.squash_merge( + commit = repo.squashMerge( item, zuul_event_id=zuul_event_id) + elif mode == zuul.model.MERGER_REBASE: + commit = repo.rebaseMerge( + item, base, zuul_event_id=zuul_event_id) else: raise Exception("Unsupported merge mode: %s" % mode) except git.GitCommandError: |