| Index: third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
|
| index 599b48d83642e50753971ca43857e0c7bee360c5..cf1c35be0fc256a0fd37ead27e830c0dcec8eac1 100644
|
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
|
| @@ -8,46 +8,62 @@ from webkitpy.w3c.local_wpt import LocalWPT
|
| from webkitpy.w3c.chromium_commit import ChromiumCommit
|
|
|
| _log = logging.getLogger(__name__)
|
| +
|
| CHROMIUM_WPT_DIR = 'third_party/WebKit/LayoutTests/imported/wpt/'
|
|
|
| +# TODO(jeffcarp): have the script running this fetch Chromium origin/master
|
| +# TODO(jeffcarp): move WPT fetch out of its constructor to match planned ChromiumWPT pattern
|
|
|
| class TestExporter(object):
|
|
|
| def __init__(self, host, wpt_github, dry_run=False):
|
| self.host = host
|
| self.wpt_github = wpt_github
|
| - self.local_wpt = LocalWPT(self.host)
|
| self.dry_run = dry_run
|
| + self.local_wpt = LocalWPT(self.host)
|
|
|
| def run(self):
|
| - # First, poll for an in-flight pull request and merge if exists
|
| + """Query in-flight pull requests, then merge PR or create one.
|
| +
|
| + This script assumes it will be run on a regular interval. On
|
| + each invocation, it will either attempt to merge or attempt to
|
| + create a PR, never both.
|
| + """
|
| pull_requests = self.wpt_github.in_flight_pull_requests()
|
|
|
| if len(pull_requests) == 1:
|
| - pull_request = pull_requests.pop()
|
| -
|
| - _log.info('In-flight PR found: #%d', pull_request['number'])
|
| - _log.info(pull_request['title'])
|
| -
|
| - # TODO(jeffcarp): Check the PR status here
|
| -
|
| - if self.dry_run:
|
| - _log.info('[dry_run] Would have attempted to merge PR')
|
| - else:
|
| - _log.info('Merging...')
|
| - self.wpt_github.merge_pull_request(pull_request['number'])
|
| - _log.info('PR merged!')
|
| + self.merge_in_flight_pull_request(pull_requests.pop())
|
| elif len(pull_requests) > 1:
|
| _log.error(pull_requests)
|
| # TODO(jeffcarp): Print links to PRs
|
| raise Exception('More than two in-flight PRs!')
|
| + else:
|
| + self.export_first_exportable_commit()
|
| +
|
| + def merge_in_flight_pull_request(self, pull_request):
|
| + """Attempt to merge an in-flight PR.
|
|
|
| - # Second, look for exportable commits in Chromium
|
| - # At this point, no in-flight PRs should exist
|
| - # If there was an issue merging, it should have errored out
|
| + Args:
|
| + pull_request: a PR object returned from the GitHub API.
|
| + """
|
| +
|
| + _log.info('In-flight PR found: #%d', pull_request['number'])
|
| + _log.info(pull_request['title'])
|
|
|
| - # TODO(jeffcarp): have the script running this fetch Chromium origin/master
|
| - # TODO(jeffcarp): move WPT fetch out of its constructor to match planned ChromiumWPT pattern
|
| + # TODO(jeffcarp): Check the PR status here (for Travis CI, etc.)
|
| +
|
| + if self.dry_run:
|
| + _log.info('[dry_run] Would have attempted to merge PR')
|
| + return
|
| +
|
| + _log.info('Merging...')
|
| + self.wpt_github.merge_pull_request(pull_request['number'])
|
| + _log.info('PR merged! Deleting branch.')
|
| + self.wpt_github.delete_remote_branch('chromium-export-try')
|
| + _log.info('Branch deleted!')
|
| +
|
| + def export_first_exportable_commit(self):
|
| + """Looks for exportable commits in Chromium, creates PR if found."""
|
|
|
| wpt_commit, chromium_commit = self.local_wpt.most_recent_chromium_commit()
|
| assert chromium_commit, 'No Chromium commit found, this is impossible'
|
| @@ -79,8 +95,6 @@ class TestExporter(object):
|
| patch = outbound_commit.format_patch()
|
| message = outbound_commit.message()
|
|
|
| - # TODO: now do a test comparison of patch against local WPT
|
| -
|
| if self.dry_run:
|
| _log.info('[dry_run] Stopping before creating PR')
|
| _log.info('\n\n[dry_run] message:')
|
| @@ -89,10 +103,10 @@ class TestExporter(object):
|
| _log.info(patch)
|
| return
|
|
|
| - local_branch_name = self.local_wpt.create_branch_with_patch(message, patch)
|
| + remote_branch_name = self.local_wpt.create_branch_with_patch(message, patch)
|
|
|
| response_data = self.wpt_github.create_pr(
|
| - local_branch_name=local_branch_name,
|
| + remote_branch_name=remote_branch_name,
|
| desc_title=outbound_commit.subject(),
|
| body=outbound_commit.body())
|
|
|
|
|