--- 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]]