autoland: refactor: extract core transplant logic (bug 1349997); r?gps draft
authorbyron jones <glob@mozilla.com>
Thu, 23 Mar 2017 13:56:12 +0800
changeset 10578 59f5a72f798be190b4a10eb128c08ea6b82ae831
parent 10577 55b724357e7f85868ad3c6c5e4f2f6ed961ceb98
child 10579 0d0c11414c2f6f26ab70cc2f1821d175fddd116c
push id1595
push userbjones@mozilla.com
push dateFri, 31 Mar 2017 04:09:17 +0000
reviewersgps
bugs1349997
autoland: refactor: extract core transplant logic (bug 1349997); r?gps Further simplify the core transplant method by extracting logic into methods. MozReview-Commit-ID: 6GzxDW0qI2O
autoland/autoland/transplant.py
--- a/autoland/autoland/transplant.py
+++ b/autoland/autoland/transplant.py
@@ -55,35 +55,22 @@ class Transplant:
         self.tree = tree
         self.destination = destination
         self.source_rev = rev
 
     def transplant(self, trysyntax=None, push_bookmark=False,
                    commit_descriptions=None):
         result = ''
         try:
-            # Obtain remote tip. We assume there is only a single head.
-            remote_tip = self.get_remote_tip()
-
-            # Strip any lingering draft changesets.
-            self.strip_drafts()
-
-            # Pull from "upstream".
-            self.update_repo(remote_tip)
+            # Update from "upstream"
+            remote_tip = self.update_repo()
 
             # Update commit descriptions and rebase.
             if not trysyntax:
-                base_revision = self.rewrite_commit_descriptions(
-                    commit_descriptions)
-                logger.info('base revision: %s' % base_revision)
-
-                result = self.rebase(base_revision, remote_tip)
-                logger.info('rebased (tip) revision: %s' % result)
-
-                self.validate_descriptions(commit_descriptions)
+                result = self.apply_changes(remote_tip, commit_descriptions)
 
             # Now we push to the destination
             if trysyntax:
                 result = self.push_to_try(trysyntax)
             elif push_bookmark:
                 self.push_bookmark_to_repo(push_bookmark)
             else:
                 self.push_to_repo()
@@ -91,16 +78,38 @@ class Transplant:
             # Strip any lingering draft changesets.
             self.strip_drafts()
 
             return True, result
 
         except Exception as e:
             return False, str(e)
 
+    def update_repo(self):
+        # Obtain remote tip. We assume there is only a single head.
+        remote_tip = self.get_remote_tip()
+
+        # Strip any lingering draft changesets.
+        self.strip_drafts()
+
+        # Pull from "upstream".
+        self.update_from_upstream(remote_tip)
+
+        return remote_tip
+
+    def apply_changes(self, remote_tip, commit_descriptions):
+        base_revision = self.rewrite_commit_descriptions(commit_descriptions)
+        logger.info('base revision: %s' % base_revision)
+
+        base_revision = self.rebase(base_revision, remote_tip)
+        logger.info('rebased (tip) revision: %s' % base_revision)
+
+        self.validate_descriptions(commit_descriptions)
+        return base_revision
+
     def run_hg(self, args):
         logger.info('rev: %s: executing: %s' % (self.source_rev, args))
         out = hglib.util.BytesIO()
         out_channels = {b'o': out.write, b'e': out.write}
         ret = self.hg_repo.runcommand(args, {}, out_channels)
         if ret:
             raise hglib.error.CommandError(args, ret, out, None)
         return out.getvalue()
@@ -127,17 +136,17 @@ class Transplant:
         # first component.
         remote_tip = self.run_hg_cmds([
             ['identify', 'upstream', '-r', 'tip']
         ])
         remote_tip = remote_tip.split()[0]
         assert len(remote_tip) == 12, remote_tip
         return remote_tip
 
-    def update_repo(self, remote_rev):
+    def update_from_upstream(self, remote_rev):
         # Pull "upstream" and update to remote tip. Pull revisions to land and
         # update to them.
         cmds = [['pull', 'upstream'],
                 ['rebase', '--abort', '-r', remote_rev],
                 ['update', '--clean', '-r', remote_rev],
                 ['pull', self.tree, '-r', self.source_rev],
                 ['update', self.source_rev]]