Title: [225742] trunk
Revision
225742
Author
[email protected]
Date
2017-12-11 02:16:55 -0800 (Mon, 11 Dec 2017)

Log Message

Unreviewed, rolling out r225737.

Breaks Git clones of the repository, including EWSs and webkitbot.

Reverted changeset:

"Add a script to automate W3c web-platform-tests pull request
creations from WebKit commits"
https://bugs.webkit.org/show_bug.cgi?id=169462
https://trac.webkit.org/changeset/225737

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (225741 => 225742)


--- trunk/LayoutTests/ChangeLog	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/LayoutTests/ChangeLog	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,3 +1,16 @@
+2017-12-11  Zan Dobersek  <[email protected]>
+
+        Unreviewed, rolling out r225737.
+
+        Breaks Git clones of the repository, including EWSs and webkitbot.
+
+        Reverted changeset:
+
+        "Add a script to automate W3c web-platform-tests pull request
+        creations from WebKit commits"
+        https://bugs.webkit.org/show_bug.cgi?id=169462
+        https://trac.webkit.org/changeset/225737
+
 2017-12-11  Manuel Rego Casasnovas  <[email protected]>
 
         REGRESSION(r221931): Row stretch doesn't work for grid container with min-height

Modified: trunk/Tools/ChangeLog (225741 => 225742)


--- trunk/Tools/ChangeLog	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/ChangeLog	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,3 +1,16 @@
+2017-12-11  Zan Dobersek  <[email protected]>
+
+        Unreviewed, rolling out r225737.
+
+        Breaks Git clones of the repository, including EWSs and webkitbot.
+
+        Reverted changeset:
+
+        "Add a script to automate W3c web-platform-tests pull request
+        creations from WebKit commits"
+        https://bugs.webkit.org/show_bug.cgi?id=169462
+        https://trac.webkit.org/changeset/225737
+
 2017-12-11  Carlos Garcia Campos  <[email protected]>
 
         [GTK] WebDriver: run-webdriver-tests is leaking a DumpRenderTree directory in tmp

Deleted: trunk/Tools/Scripts/export-w3c-test-changes (225741 => 225742)


--- trunk/Tools/Scripts/export-w3c-test-changes	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/export-w3c-test-changes	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 Apple Incorporated. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer.
-# 2. Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials
-#    provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-import sys
-
-from webkitpy.w3c import test_exporter
-
-
-sys.exit(test_exporter.main(sys.argv[1:], sys.stdout, sys.stderr))

Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -29,6 +29,7 @@
 
 import datetime
 import logging
+import os
 import re
 
 from webkitpy.common.memoized import memoized
@@ -36,7 +37,7 @@
 
 from .commitmessage import CommitMessage
 from .scm import AuthenticationError, SCM, commit_error_handler
-from .svn import SVNRepository
+from .svn import SVN, SVNRepository
 
 _log = logging.getLogger(__name__)
 
@@ -506,11 +507,11 @@
     def deinit_submodules(self):
         return self._run_git(['submodule', 'deinit', '-f', '.'])
 
-    def branch_ref_exists(self, branch_ref):
-        return self._run_git(['show-ref', '--quiet', '--verify', 'refs/heads/' + branch_ref], return_exit_code=True) == 0
+    def _branch_ref_exists(self, branch_ref):
+        return self._run_git(['show-ref', '--quiet', '--verify', branch_ref], return_exit_code=True) == 0
 
     def delete_branch(self, branch_name):
-        if self.branch_ref_exists(branch_name):
+        if self._branch_ref_exists('refs/heads/' + branch_name):
             self._run_git(['branch', '-D', branch_name])
 
     def remote_merge_base(self):
@@ -521,7 +522,7 @@
         remote_branch_refs = self.read_git_config('svn-remote.svn.fetch', cwd=self.checkout_root, executive=self._executive)
         if not remote_branch_refs:
             remote_master_ref = 'refs/remotes/origin/master'
-            if not self.branch_ref_exists(remote_master_ref):
+            if not self._branch_ref_exists(remote_master_ref):
                 raise ScriptError(message="Can't find a branch to diff against. svn-remote.svn.fetch is not in the git config and %s does not exist" % remote_master_ref)
             return remote_master_ref
 
@@ -583,37 +584,6 @@
     def fetch(self, remote='origin'):
         return self._run_git(['fetch', remote])
 
-    # Reset current HEAD to the specified commit.
-    def reset_hard(self, commit):
-        return self._run_git(['reset', '--hard', commit])
-
-    def apply_mail_patch(self, options):
-        return self._run_git(['apply'] + options)
-
-    def commit(self, options):
-        return self._run_git(['commit'] + options)
-
-    def format_patch(self, options):
-        return self._run_git(['format-patch'] + options)
-
-    def request_pull(self, options):
-        return self._run_git(['request-pull'] + options)
-
-    def remote(self, options):
-        return self._run_git(['remote'] + options)
-
-    def push(self, options):
-        return self._run_git(['push'] + options)
-
-    def local_config(self, key):
-        return self._run_git(['config', '--get', '--local', key], error_handler=Executive.ignore_error)
-
-    def set_local_config(self, key, value):
-        return self._run_git(['config', '--add', '--local', key, value], error_handler=Executive.ignore_error)
-
-    def checkout_new_branch(self, branch_name):
-        return self._run_git(['checkout', '-b', branch_name])
-
     def checkout(self, revision, quiet=None):
         command = ['checkout', revision]
         if quiet:

Modified: trunk/Tools/Scripts/webkitpy/common/net/web.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/common/net/web.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/common/net/web.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -34,13 +34,3 @@
 class Web(object):
     def get_binary(self, url, convert_404_to_None=False):
         return NetworkTransaction(convert_404_to_None=convert_404_to_None).run(lambda: urllib2.urlopen(url).read())
-
-    def request(self, method, url, data, headers=None):
-        opener = urllib2.build_opener(urllib2.HTTPHandler)
-        request = urllib2.Request(url="" data=""
-        request.get_method = lambda: method
-
-        if headers:
-            for key, value in headers.items():
-                request.add_header(key, value)
-        return opener.open(request)

Modified: trunk/Tools/Scripts/webkitpy/common/net/web_mock.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/common/net/web_mock.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/common/net/web_mock.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -27,13 +27,12 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import StringIO
-import urllib2
 
+
 class MockWeb(object):
-    def __init__(self, urls=None, responses=[]):
+    def __init__(self, urls=None):
         self.urls = urls or {}
         self.urls_fetched = []
-        self.responses = responses
 
     def get_binary(self, url, convert_404_to_None=False):
         self.urls_fetched.append(url)
@@ -41,30 +40,7 @@
             return self.urls[url]
         return "MOCK Web result, convert 404 to None=%s" % convert_404_to_None
 
-    def request(self, method, url, data, headers=None):  # pylint: disable=unused-argument
-        return MockResponse(self.responses.pop(0))
 
-
-class MockResponse(object):
-    def __init__(self, values):
-        self.status_code = values['status_code']
-        self.url = ''
-        self.body = values.get('body', '')
-
-        if int(self.status_code) >= 400:
-            raise urllib2.HTTPError(
-                url=""
-                code=self.status_code,
-                msg='Received error status code: {}'.format(self.status_code),
-                hdrs={},
-                fp=None)
-
-    def getcode(self):
-        return self.status_code
-
-    def read(self):
-        return self.body
-
 # FIXME: Classes which are using Browser probably want to use Web instead.
 class MockBrowser(object):
     params = {}

Deleted: trunk/Tools/Scripts/webkitpy/w3c/common.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/common.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/common.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,99 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#    * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#    * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Utility functions used both when importing and exporting."""
-
-import json
-import logging
-
-
-WPT_GH_ORG = 'w3c'
-WPT_GH_REPO_NAME = 'web-platform-tests'
-WPT_GH_URL = 'https://github.com/%s/%s/' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
-WPT_MIRROR_URL = 'https://chromium.googlesource.com/external/w3c/web-platform-tests.git'
-WPT_GH_SSH_URL_TEMPLATE = 'https://{}@github.com/%s/%s.git' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
-WPT_REVISION_FOOTER = 'WPT-Export-Revision:'
-EXPORT_PR_LABEL = 'chromium-export'
-PROVISIONAL_PR_LABEL = 'do not merge yet'
-
-# TODO(qyearsley): Avoid hard-coding third_party/WebKit/LayoutTests.
-CHROMIUM_WPT_DIR = 'third_party/WebKit/LayoutTests/external/wpt/'
-
-_log = logging.getLogger(__name__)
-
-
-def read_credentials(host, credentials_json):
-    """Extracts credentials from a JSON file."""
-    if not credentials_json:
-        return {}
-    if not host.filesystem.exists(credentials_json):
-        _log.warning('Credentials JSON file not found at %s.', credentials_json)
-        return {}
-    credentials = {}
-    contents = json.loads(host.filesystem.read_text_file(credentials_json))
-    for key in ('GH_USER', 'GH_TOKEN', 'GERRIT_USER', 'GERRIT_TOKEN'):
-        if key in contents:
-            credentials[key] = contents[key]
-    return credentials
-
-
-def is_testharness_baseline(filename):
-    """Checks whether a given file name appears to be a testharness baseline.
-
-    Args:
-        filename: A path (absolute or relative) or a basename.
-    """
-    return filename.endswith('-expected.txt')
-
-
-def is_basename_skipped(basename):
-    """Checks whether to skip (not sync) a file based on its basename.
-
-    Note: this function is used during both import and export, i.e., files with
-    skipped basenames are never imported or exported.
-    """
-    assert '/' not in basename
-    blacklist = [
-        'MANIFEST.json',    # MANIFEST.json is automatically regenerated.
-        'OWNERS',           # https://crbug.com/584660 https://crbug.com/702283
-        'reftest.list',     # https://crbug.com/582838
-    ]
-    return (basename in blacklist
-            or is_testharness_baseline(basename)
-            or basename.startswith('.'))
-
-
-def is_file_exportable(path):
-    """Checks whether a file in Chromium WPT should be exported to upstream.
-
-    Args:
-        path: A relative path from the root of Chromium repository.
-    """
-    assert path.startswith(CHROMIUM_WPT_DIR)
-    basename = path[path.rfind('/') + 1:]
-    return not is_basename_skipped(basename)

Deleted: trunk/Tools/Scripts/webkitpy/w3c/test_exporter.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/test_exporter.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/test_exporter.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,293 +0,0 @@
-# Copyright (c) 2017, Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1.  Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-# 2.  Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. AND ITS CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""
- This script uploads changes made to W3C web-platform-tests tests.
-"""
-
-import argparse
-import logging
-import os
-import time
-
-from webkitpy.common.checkout.scm.git import Git
-from webkitpy.common.host import Host
-from webkitpy.common.net.bugzilla import Bugzilla
-from webkitpy.common.webkit_finder import WebKitFinder
-from webkitpy.w3c.wpt_github import WPTGitHub
-
-_log = logging.getLogger(__name__)
-
-WEBKIT_WPT_DIR = 'LayoutTests/imported/w3c/web-platform-tests'
-WPT_PR_URL = "https://github.com/w3c/web-platform-tests/pull/"
-
-
-class TestExporter(object):
-
-    def __init__(self, host, options, gitClass=Git, bugzillaClass=Bugzilla, WPTGitHubClass=WPTGitHub):
-        self._host = host
-        self._filesystem = host.filesystem
-        self._options = options
-
-        self._host.initialize_scm()
-
-        self._bugzilla = bugzillaClass()
-        self._bug_id = options.bug_id
-        if not self._bug_id:
-            if options.attachment_id:
-                self._bug_id = self._bugzilla.bug_id_for_attachment_id(options.attachment_id)
-            elif options.git_commit:
-                self._bug_id = self._host.checkout().bug_id_for_this_commit(options.git_commit)
-
-        if not self._options.repository_directory:
-            webkit_finder = WebKitFinder(self._filesystem)
-            self._options.repository_directory = webkit_finder.path_from_webkit_base('WebKitBuild', 'w3c-tests', 'web-platform-tests')
-
-        self._git = self._ensure_wpt_repository("https://github.com/w3c/web-platform-tests.git", self._options.repository_directory, gitClass)
-
-        self._username = options.username
-        if not self._username:
-            self._username = self._git.local_config('github.username').rstrip()
-            if not self._username:
-                self._username = os.environ.get('GITHUB_USERNAME')
-            if not self._username:
-                raise ValueError("Missing GitHub username, please provide it as a parameter.")
-        elif not self._git.local_config('github.username'):
-            self._git.set_local_config('github.username', self._username)
-
-        self._token = options.token
-        if not self._token:
-            self._token = self._git.local_config('github.token').rstrip()
-            if not self._token:
-                self._token = os.environ.get('GITHUB_TOKEN')
-            if not self._token:
-                _log.info("Missing GitHub token, the script will not be able to create a pull request to W3C web-platform-tests repository.")
-        elif not self._git.local_config('github.token'):
-            self._git.set_local_config('github.token', self._token)
-
-        self._github = WPTGitHubClass(self._host, self._username, self._token) if self._username and self._token else None
-
-        self._branch_name = self._ensure_new_branch_name()
-        self._public_branch_name = options.public_branch_name if options.public_branch_name else self._branch_name
-        self._bugzilla_url = "https://bugs.webkit.org/show_bug.cgi?id=" + str(self._bug_id)
-        self._commit_message = options.message if options.message else 'WebKit export of ' + self._bugzilla_url
-
-        self._wpt_fork_remote = options.repository_remote
-        if not self._wpt_fork_remote:
-            self._wpt_fork_remote = self._username
-
-        self._wpt_fork_push_url = options.repository_remote_url
-        if not self._wpt_fork_push_url:
-            self._wpt_fork_push_url = "https://" + self._username + "@github.com/" + self._username + "/web-platform-tests.git"
-
-    def _ensure_wpt_repository(self, url, wpt_repository_directory, gitClass):
-        git = None
-        if not self._filesystem.exists(wpt_repository_directory):
-            _log.info('Cloning %s into %s...' % (url, wpt_repository_directory))
-            gitClass.clone(url, wpt_repository_directory, self._host.executive)
-        git = gitClass(wpt_repository_directory, None, executive=self._host.executive, filesystem=self._filesystem)
-        return git
-
-    def _fetch_wpt_repository(self):
-        _log.info('Fetching web-platform-tests repository')
-        self._git.fetch()
-
-    def _ensure_new_branch_name(self):
-        branch_name_prefix = "wpt-export-for-webkit-" + (str(self._bug_id) if self._bug_id else "0")
-        branch_name = branch_name_prefix
-        counter = 0
-        while self._git.branch_ref_exists(branch_name):
-            branch_name = ("%s-%s") % (branch_name_prefix, str(counter))
-            counter = counter + 1
-        return branch_name
-
-    def download_and_commit_patch(self):
-        if self._options.git_commit:
-            return True
-
-        patch_options = ["--no-update", "--no-clean", "--local-commit"]
-        if self._options.attachment_id:
-            patch_options.insert("apply-attachment")
-            patch_options.append(self._options.attachment_id)
-        elif self._options.bug_id:
-            patch_options.insert("apply-from-bug")
-            patch_options.append(self._options.bug_id)
-        else:
-            _log.info("Exporting local changes")
-            return
-        raise TypeError("Retrieval of patch from bugzilla is not yet implemented")
-
-    def clean(self):
-        _log.info('Cleaning web-platform-tests master branch')
-        self._git.checkout('master')
-        self._git.reset_hard('origin/master')
-
-    def create_branch_with_patch(self, patch):
-        _log.info('Applying patch to web-platform-tests branch ' + self._branch_name)
-        try:
-            self._git.checkout_new_branch(self._branch_name)
-        except Exception as e:
-            _log.warning(e)
-            _log.info("Retrying to create the branch")
-            self._git.delete_branch(self._branch_name)
-            self._git.checkout_new_branch(self._branch_name)
-        try:
-            self._git.apply_mail_patch([patch, '--exclude', '*-expected.txt'])
-        except Exception as e:
-            _log.warning(e)
-            self._git.apply_mail_patch(['--abort'])
-            return False
-        self._git.commit(['-a', '-m', self._commit_message])
-        return True
-
-    def push_to_wpt_fork(self):
-        self.create_upload_remote_if_needed()
-        wpt_fork_branch_github_url = "https://github.com/" + self._username + "/web-platform-tests/tree/" + self._public_branch_name
-        _log.info('Pushing branch ' + self._branch_name + " to " + self._git.remote(["get-url", self._wpt_fork_remote]).rstrip())
-        _log.info('This may take some time')
-        self._git.push([self._wpt_fork_remote, self._branch_name + ":" + self._public_branch_name, '-f'])
-        _log.info('Branch available at ' + wpt_fork_branch_github_url)
-        return True
-
-    def make_pull_request(self):
-        if not self._github:
-            _log.info('Missing information to create a pull request')
-            return
-
-        _log.info('Making pull request')
-        description = self._bugzilla.fetch_bug_dictionary(self._bug_id)["title"]
-        pr_number = self._github.create_pr(self._wpt_fork_remote + ':' + self._branch_name, self._commit_message, description)
-        if self._bug_id:
-            self._bugzilla.post_comment_to_bug(self._bug_id, "Submitted web-platform-tests pull request: " + WPT_PR_URL + str(pr_number))
-
-    def delete_local_branch(self):
-        _log.info('Removing branch ' + self._branch_name)
-        self._git.checkout('master')
-        self._git.delete_branch(self._branch_name)
-
-    def create_git_patch(self):
-        patch_file = './patch.temp.' + str(time.clock())
-        git_commit = "HEAD...." if not self._options.git_commit else self._options.git_commit + "~1.." + self._options.git_commit
-        patch_data = self._host.scm().create_patch(git_commit, [WEBKIT_WPT_DIR])
-        if not patch_data or not 'diff' in patch_data:
-            _log.info('No changes to upstream, patch data is: "%s"' % (patch_data))
-            return ''
-        # FIXME: We can probably try to use --relative git parameter to not do that replacement.
-        patch_data = patch_data.replace(WEBKIT_WPT_DIR + '/', '')
-        patch_file = self._filesystem.abspath(patch_file)
-        self._filesystem.write_text_file(patch_file, patch_data)
-        return patch_file
-
-    def create_upload_remote_if_needed(self):
-        if not self._wpt_fork_remote in self._git.remote([]):
-            self._git.remote(["add", self._wpt_fork_remote, self._wpt_fork_push_url])
-
-    def do_export(self):
-        git_patch_file = self.create_git_patch()
-
-        if not git_patch_file:
-            _log.error("Unable to create a patch to apply to web-platform-tests repository")
-            return
-
-        self._fetch_wpt_repository()
-        self.clean()
-
-        if not self.create_branch_with_patch(git_patch_file):
-            _log.error("Cannot create web-platform-tests local branch from the patch")
-            self.delete_local_branch()
-            return
-
-        if git_patch_file:
-            self._filesystem.remove(git_patch_file)
-
-        try:
-            if self.push_to_wpt_fork():
-                if self._options.create_pull_request:
-                    self.make_pull_request()
-        finally:
-            self.delete_local_branch()
-            _log.info("Finished")
-            self.clean()
-
-
-def parse_args(args):
-    description = """Script to generate a pull request to W3C web-platform-tests repository
-    'Tools/Scripts/export-w3c-test-changes -c -g HEAD -b XYZ' will do the following:
-    - Clone web-platform-tests repository if not done already and set it up for pushing branches.
-    - Gather WebKit bug id XYZ bug and changes to apply to web-platform-tests repository based on the HEAD commit
-    - Create a remote branch named webkit-XYZ on https://github.com/USERNAME/web-platform-tests.git repository based on the locally applied patch.
-    -    USERNAME may be set using the environment variable GITHUB_USERNAME or as a command line option. It is then stored in git config as github.username.
-    -    Github credential may be set using the environment variable GITHUB_TOKEN or as a command line option. (Please provide a valid GitHub 'Personal access token' with 'repo' as scope). It is then stored in git config as github.token.
-    - Make the related pull request on https://github.com/w3c/web-platform-tests.git repository.
-    - Clean the local Git repository
-    Notes:
-    - It is safer to provide a bug id using -b option (bug id from a git commit is not always working).
-    - As a dry run, one can start by running the script without -c. This will only create the branch on the user public GitHub repository.
-    - By default, the script will create an https remote URL that will require a password-based authentication to GitHub. If you are using an SSH key, please use the --remote-url option.
-    FIXME:
-    - Add a label on github issues
-    - The script is not yet able to update an existing pull request
-    - Need a way to monitor the progress of the pul request so that status of all pending pull requests can be done at import time.
-    """
-    parser = argparse.ArgumentParser(prog='export-w3c-test-changes ...', description=description, formatter_class=argparse.RawDescriptionHelpFormatter)
-
-    parser.add_argument('-g', '--git-commit', dest='git_commit', default=None, help='Git commit to apply')
-    parser.add_argument('-b', '--bug', dest='bug_id', default=None, help='Bug ID to search for patch')
-    parser.add_argument('-a', '--attachment', dest='attachment_id', default=None, help='Attachment ID to search for patch')
-    parser.add_argument('-n', '--name', dest='username', default=None, help='github user name if GITHUB_USERNAME is not defined or github.username in the WPT repo config is not defined')
-    parser.add_argument('-t', '--token', dest='token', default=None, help='github token, needed for creating pull requests only if GITHUB_TOKEN env variable is not defined or github.token in the WPT repo config is not defined')
-    parser.add_argument('-bn', '--branch-name', dest='public_branch_name', default=None, help='Branch name to push to')
-    parser.add_argument('-m', '--message', dest='message', default=None, help='Commit message')
-    parser.add_argument('-r', '--remote', dest='repository_remote', default=None, help='repository origin to use to push')
-    parser.add_argument('-u', '--remote-url', dest='repository_remote_url', default=None, help='repository url to use to push')
-    parser.add_argument('-d', '--repository', dest='repository_directory', default=None, help='repository directory')
-    parser.add_argument('-c', '--create-pr', dest='create_pull_request', action='', default=False, help='create pull request to w3c web-platform-tests')
-
-    options, args = parser.parse_known_args(args)
-
-    return options
-
-
-def configure_logging():
-    class LogHandler(logging.StreamHandler):
-
-        def format(self, record):
-            if record.levelno > logging.INFO:
-                return "%s: %s" % (record.levelname, record.getMessage())
-            return record.getMessage()
-
-    logger = logging.getLogger()
-    logger.setLevel(logging.INFO)
-    handler = LogHandler()
-    handler.setLevel(logging.INFO)
-    logger.addHandler(handler)
-    return handler
-
-
-def main(_argv, _stdout, _stderr):
-    options = parse_args(_argv)
-
-    configure_logging()
-
-    test_exporter = TestExporter(Host(), options)
-
-    test_exporter.do_export()

Deleted: trunk/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,132 +0,0 @@
-# Copyright (c) 2017, Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1.  Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-# 2.  Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. AND ITS CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import unittest
-
-from webkitpy.common.host_mock import MockHost
-from webkitpy.common.system.filesystem_mock import MockFileSystem
-from webkitpy.common.system.executive_mock import MockExecutive2
-from webkitpy.w3c.test_exporter import TestExporter, parse_args
-from webkitpy.w3c.wpt_github_mock import MockWPTGitHub
-
-
-class TestExporterTest(unittest.TestCase):
-    maxDiff = None
-
-    class MockBugzilla(object):
-        def __init__(self):
-            self.calls = []
-
-        def fetch_bug_dictionary(self, id):
-            self.calls.append('fetch bug ' + id)
-            return {"title": "my bug title"}
-
-        def post_comment_to_bug(self, id, comment):
-            self.calls.append('post comment to bug ' + id + ' : ' + comment)
-            return True
-
-    class MockGit(object):
-        @classmethod
-        def clone(cls, url, directory, executive=None):
-            return True
-
-        def __init__(self, repository_directory, patch_directories, executive, filesystem):
-            self.calls = [repository_directory]
-
-        def fetch(self):
-            self.calls.append('fetch')
-
-        def checkout(self, branch):
-            self.calls.append('checkout ' + branch)
-
-        def reset_hard(self, commit):
-            self.calls.append('reset hard ' + commit)
-
-        def push(self, options):
-            self.calls.append('push ' + ' '.join(options))
-
-        def format_patch(self, options):
-            self.calls.append('format patch ' + ' '.join(options))
-            return 'formatted patch with changes done to LayoutTests/imported/w3c/web-platform-tests/test1.html'
-
-        def delete_branch(self, branch_name):
-            self.calls.append('delete branch ' + branch_name)
-
-        def checkout_new_branch(self, branch_name):
-            self.calls.append('checkout new branch ' + branch_name)
-
-        def apply_mail_patch(self, options):
-            # filtering options[0] as it changes for every run
-            self.calls.append('apply_mail_patch patch.temp ' + ' '.join(options[1:]))
-
-        def commit(self, options):
-            self.calls.append('commit ' + ' '.join(options))
-
-        def remote(self, options):
-            self.calls.append('remote ' + ' '.join(options))
-            return "my_remote_url"
-
-        def local_config(self, name):
-            return 'value'
-
-        def branch_ref_exists(self, name):
-            return False
-
-        def create_patch(self, commit, arguments):
-            self.calls.append('create_patch ' + commit + ' ' + str(arguments))
-            return 'my patch containing some diffs'
-
-    class MyMockHost(MockHost):
-        def __init__(self):
-            MockHost.__init__(self)
-            self.executive = MockExecutive2(exception=OSError())
-            self.filesystem = MockFileSystem()
-            self._mockSCM = TestExporterTest.MockGit(None, None, None, None)
-
-        def scm(self):
-            return self._mockSCM
-
-    def test_export(self):
-        host = TestExporterTest.MyMockHost()
-        options = parse_args(['test_exporter.py', '-g', 'HEAD', '-b', '1234', '-c', '-n', 'USER', '-t', 'TOKEN'])
-        exporter = TestExporter(host, options, TestExporterTest.MockGit, TestExporterTest.MockBugzilla, MockWPTGitHub)
-        exporter.do_export()
-        self.assertEquals(exporter._github.calls, ['create_pr'])
-        self.assertEquals(exporter._git.calls, [
-            '/mock-checkout/WebKitBuild/w3c-tests/web-platform-tests',
-            'fetch',
-            'checkout master',
-            'reset hard origin/master',
-            'checkout new branch wpt-export-for-webkit-1234',
-            'apply_mail_patch patch.temp --exclude *-expected.txt',
-            'commit -a -m WebKit export of https://bugs.webkit.org/show_bug.cgi?id=1234',
-            'remote ',
-            'remote add USER https://[email protected]/USER/web-platform-tests.git',
-            'remote get-url USER',
-            'push USER wpt-export-for-webkit-1234:wpt-export-for-webkit-1234 -f',
-            'checkout master',
-            'delete branch wpt-export-for-webkit-1234',
-            'checkout master',
-            'reset hard origin/master'])
-        self.assertEquals(exporter._bugzilla.calls, [
-            'fetch bug 1234',
-            'post comment to bug 1234 : Submitted web-platform-tests pull request: https://github.com/w3c/web-platform-tests/pull/5678'])

Deleted: trunk/Tools/Scripts/webkitpy/w3c/wpt_github.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/wpt_github.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/wpt_github.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,427 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#    * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#    * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import base64
-import json
-import logging
-import re
-import urllib2
-from collections import namedtuple
-
-from webkitpy.common.memoized import memoized
-from webkitpy.w3c.common import WPT_GH_ORG, WPT_GH_REPO_NAME, EXPORT_PR_LABEL
-
-_log = logging.getLogger(__name__)
-API_BASE = 'https://api.github.com'
-MAX_PER_PAGE = 100
-
-
-class WPTGitHub(object):
-    """An interface to GitHub for interacting with the web-platform-tests repo.
-
-    This class contains methods for sending requests to the GitHub API.
-    Unless mentioned otherwise, API calls are expected to succeed, and
-    GitHubError will be raised if an API call fails.
-    """
-
-    def __init__(self, host, user=None, token=None, pr_history_window=5000):
-        self.host = host
-        self.user = user
-        self.token = token
-
-        self._pr_history_window = pr_history_window
-
-    def has_credentials(self):
-        return self.user and self.token
-
-    def auth_token(self):
-        assert self.has_credentials()
-        return base64.b64encode('{}:{}'.format(self.user, self.token))
-
-    def request(self, path, method, body=None):
-        """Sends a request to GitHub API and deserializes the response.
-
-        Args:
-            path: API endpoint without base URL (starting with '/').
-            method: HTTP method to be used for this request.
-            body: Optional payload in the request body (default=None).
-
-        Returns:
-            A JSONResponse instance.
-        """
-        assert path.startswith('/')
-
-        if body:
-            body = json.dumps(body)
-
-        headers = {'Accept': 'application/vnd.github.v3+json'}
-
-        if self.has_credentials():
-            headers['Authorization'] = 'Basic {}'.format(self.auth_token())
-
-        response = self.host.web.request(
-            method=method,
-            url="" + path,
-            data=""
-            headers=headers
-        )
-        return JSONResponse(response)
-
-    @staticmethod
-    def extract_link_next(link_header):
-        """Extracts the URI to the next page of results from a response.
-
-        As per GitHub API specs, the link to the next page of results is
-        extracted from the Link header -- the link with relation type "next".
-        Docs: https://developer.github.com/v3/#pagination (and RFC 5988)
-
-        Args:
-            link_header: The value of the Link header in responses from GitHub.
-
-        Returns:
-            Path to the next page (without base URL), or None if not found.
-        """
-        # TODO(robertma): Investigate "may require expansion as URI templates" mentioned in docs.
-        # Example Link header:
-        # <https://api.github.com/resources?page=3>; rel="next", <https://api.github.com/resources?page=50>; rel="last"
-        if link_header is None:
-            return None
-        link_re = re.compile(r'<(.+?)>; *rel="(.+?)"')
-        match = link_re.search(link_header)
-        while match:
-            link, rel = match.groups()
-            if rel.lower() == 'next':
-                # Strip API_BASE so that the return value is useful for request().
-                assert link.startswith(API_BASE)
-                return link[len(API_BASE):]
-            match = link_re.search(link_header, match.end())
-        return None
-
-    def create_pr(self, remote_branch_name, desc_title, body):
-        """Creates a PR on GitHub.
-
-        API doc: https://developer.github.com/v3/pulls/#create-a-pull-request
-
-        Returns:
-            The issue number of the created PR.
-        """
-        assert remote_branch_name
-        assert desc_title
-        assert body
-
-        path = '/repos/%s/%s/pulls' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
-        body = {
-            'title': desc_title,
-            'body': body,
-            'head': remote_branch_name,
-            'base': 'master',
-        }
-        response = self.request(path, method='POST', body=body)
-
-        if response.status_code != 201:
-            raise GitHubError(201, response.status_code, 'create PR')
-
-        return response.data['number']
-
-    def update_pr(self, pr_number, desc_title, body):
-        """Updates a PR on GitHub.
-
-        API doc: https://developer.github.com/v3/pulls/#update-a-pull-request
-        """
-        path = '/repos/{}/{}/pulls/{}'.format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
-        body = {
-            'title': desc_title,
-            'body': body,
-        }
-        response = self.request(path, method='PATCH', body=body)
-
-        if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'update PR %d' % pr_number)
-
-    def add_label(self, number, label):
-        """Adds a label to a GitHub issue (or PR).
-
-        API doc: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue
-        """
-        path = '/repos/%s/%s/issues/%d/labels' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            number
-        )
-        body = [label]
-        response = self.request(path, method='POST', body=body)
-
-        if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'add label %s to issue %d' % (label, number))
-
-    def remove_label(self, number, label):
-        """Removes a label from a GitHub issue (or PR).
-
-        API doc: https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
-        """
-        path = '/repos/%s/%s/issues/%d/labels/%s' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            number,
-            urllib2.quote(label),
-        )
-        response = self.request(path, method='DELETE')
-
-        # The GitHub API documentation claims that this endpoint returns a 204
-        # on success. However in reality it returns a 200.
-        if response.status_code not in (200, 204):
-            raise GitHubError((200, 204), response.status_code, 'remove label %s from issue %d' % (label, number))
-
-    def make_pr_from_item(self, item):
-        labels = [label['name'] for label in item['labels']]
-        return PullRequest(
-            title=item['title'],
-            number=item['number'],
-            body=item['body'],
-            state=item['state'],
-            labels=labels)
-
-    @memoized
-    def all_pull_requests(self):
-        """Fetches all (open and closed) PRs with the export label.
-
-        The maximum number of PRs is pr_history_window. Search endpoint is used
-        instead of listing PRs, because we need to filter by labels.
-        API doc: https://developer.github.com/v3/search/#search-issues
-
-        Returns:
-            A list of PullRequest namedtuples.
-        """
-        path = (
-            '/search/issues'
-            '?q=repo:{}/{}%20type:pr%20label:{}'
-            '&page=1'
-            '&per_page={}'
-        ).format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            EXPORT_PR_LABEL,
-            min(MAX_PER_PAGE, self._pr_history_window)
-        )
-        all_prs = []
-        while path is not None and len(all_prs) < self._pr_history_window:
-            response = self.request(path, method='GET')
-            if response.status_code == 200:
-                if response.data['incomplete_results']:
-                    raise GitHubError('complete results', 'incomplete results', 'fetch all pull requests', path)
-
-                prs = [self.make_pr_from_item(item) for item in response.data['items']]
-                all_prs += prs[:self._pr_history_window - len(all_prs)]
-            else:
-                raise GitHubError(200, response.status_code, 'fetch all pull requests', path)
-            path = self.extract_link_next(response.getheader('Link'))
-        return all_prs
-
-    def get_pr_branch(self, pr_number):
-        """Gets the remote branch name of a PR.
-
-        API doc: https://developer.github.com/v3/pulls/#get-a-single-pull-request
-
-        Returns:
-            The remote branch name.
-        """
-        path = '/repos/{}/{}/pulls/{}'.format(
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
-        response = self.request(path, method='GET')
-
-        if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'get the branch of PR %d' % pr_number)
-
-        return response.data['head']['ref']
-
-    def is_pr_merged(self, pr_number):
-        """Checks if a PR has been merged.
-
-        API doc: https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged
-
-        Returns:
-            True if merged, False if not.
-        """
-        path = '/repos/%s/%s/pulls/%d/merge' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
-        try:
-            response = self.request(path, method='GET')
-            if response.status_code == 204:
-                return True
-            else:
-                raise GitHubError(204, response.status_code, 'check if PR %d is merged' % pr_number)
-        except urllib2.HTTPError as e:
-            if e.code == 404:
-                return False
-            else:
-                raise
-
-    def merge_pr(self, pr_number):
-        """Merges a PR.
-
-        If merge cannot be performed, MergeError is raised. GitHubError is
-        raised when other unknown errors happen.
-
-        API doc: https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
-        """
-        path = '/repos/%s/%s/pulls/%d/merge' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            pr_number
-        )
-        body = {
-            'merge_method': 'rebase',
-        }
-
-        try:
-            response = self.request(path, method='PUT', body=body)
-        except urllib2.HTTPError as e:
-            if e.code == 405:
-                raise MergeError(pr_number)
-            else:
-                raise
-
-        if response.status_code != 200:
-            raise GitHubError(200, response.status_code, 'merge PR %d' % pr_number)
-
-    def delete_remote_branch(self, remote_branch_name):
-        """Deletes a remote branch.
-
-        API doc: https://developer.github.com/v3/git/refs/#delete-a-reference
-        """
-        path = '/repos/%s/%s/git/refs/heads/%s' % (
-            WPT_GH_ORG,
-            WPT_GH_REPO_NAME,
-            remote_branch_name
-        )
-        response = self.request(path, method='DELETE')
-
-        if response.status_code != 204:
-            raise GitHubError(204, response.status_code, 'delete remote branch %s' % remote_branch_name)
-
-    def pr_for_chromium_commit(self, chromium_commit):
-        """Returns a PR corresponding to the given ChromiumCommit, or None."""
-        pull_request = self.pr_with_change_id(chromium_commit.change_id())
-        if pull_request:
-            return pull_request
-        # The Change ID can't be used for commits made via Rietveld,
-        # so we fall back to trying to use commit position here.
-        # Note that Gerrit returns ToT+1 as the commit positions for in-flight
-        # CLs, but they are scrubbed from the PR description and hence would
-        # not be mismatched to random Chromium commits in the fallback.
-        # TODO(robertma): Remove this fallback after Rietveld becomes read-only.
-        return self.pr_with_position(chromium_commit.position)
-
-    def pr_with_change_id(self, target_change_id):
-        for pull_request in self.all_pull_requests():
-            # Note: Search all 'Change-Id's so that we can manually put multiple
-            # CLs in one PR. (The exporter always creates one PR for each CL.)
-            change_ids = self.extract_metadata('Change-Id: ', pull_request.body, all_matches=True)
-            if target_change_id in change_ids:
-                return pull_request
-        return None
-
-    def pr_with_position(self, position):
-        for pull_request in self.all_pull_requests():
-            # Same as above, search all 'Cr-Commit-Position's.
-            pr_commit_positions = self.extract_metadata('Cr-Commit-Position: ', pull_request.body, all_matches=True)
-            if position in pr_commit_positions:
-                return pull_request
-        return None
-
-    @staticmethod
-    def extract_metadata(tag, commit_body, all_matches=False):
-        values = []
-        for line in commit_body.splitlines():
-            if not line.startswith(tag):
-                continue
-            value = line[len(tag):]
-            if all_matches:
-                values.append(value)
-            else:
-                return value
-        return values if all_matches else None
-
-
-class JSONResponse(object):
-    """An HTTP response containing JSON data."""
-
-    def __init__(self, raw_response):
-        """Initializes a JSONResponse instance.
-
-        Args:
-            raw_response: a response object returned by open methods in urllib2.
-        """
-        self._raw_response = raw_response
-        self.status_code = raw_response.getcode()
-        try:
-            self.data = ""
-        except ValueError:
-            self.data = ""
-
-    def getheader(self, header):
-        """Gets the value of the header with the given name.
-
-        Delegates to HTTPMessage.getheader(), which is case-insensitive."""
-        return self._raw_response.info().getheader(header)
-
-
-class GitHubError(Exception):
-    """Raised when an GitHub returns a non-OK response status for a request."""
-
-    def __init__(self, expected, received, action, extra_data=None):
-        message = 'Expected {}, but received {} from GitHub when attempting to {}'.format(
-            expected, received, action
-        )
-        if extra_data:
-            message += '\n' + str(extra_data)
-        super(GitHubError, self).__init__(message)
-
-
-class MergeError(GitHubError):
-    """An error specifically for when a PR cannot be merged.
-
-    This should only be thrown when GitHub returns status code 405,
-    indicating that the PR could not be merged.
-    """
-
-    def __init__(self, pr_number):
-        super(MergeError, self).__init__(200, 405, 'merge PR %d' % pr_number)
-
-
-PullRequest = namedtuple('PullRequest', ['title', 'number', 'body', 'state', 'labels'])

Deleted: trunk/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,125 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#    * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#    * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-from webkitpy.w3c.wpt_github import MergeError, WPTGitHub
-
-
-class MockWPTGitHub(object):
-
-    # Some unused arguments may be included to match the real class's API.
-    # pylint: disable=unused-argument
-
-    def __init__(self, pull_requests, unsuccessful_merge_index=-1, create_pr_fail_index=-1, merged_index=-1):
-        """Initializes a mock WPTGitHub.
-
-        Args:
-            pull_requests: A list of wpt_github.PullRequest.
-            unsuccessful_merge_index: The index to the PR in pull_requests that
-                cannot be merged. (-1 means all can be merged.)
-            create_pr_fail_index: The 0-based index of which PR creation request
-                will fail. (-1 means all will succeed.)
-            merged_index: The index to the PR in pull_requests that is already
-                merged. (-1 means none is merged.)
-        """
-        self.pull_requests = pull_requests
-        self.calls = []
-        self.pull_requests_created = []
-        self.pull_requests_merged = []
-        self.unsuccessful_merge_index = unsuccessful_merge_index
-        self.create_pr_index = 0
-        self.create_pr_fail_index = create_pr_fail_index
-        self.merged_index = merged_index
-
-    def all_pull_requests(self, limit=30):
-        self.calls.append('all_pull_requests')
-        return self.pull_requests
-
-    def is_pr_merged(self, number):
-        for index, pr in enumerate(self.pull_requests):
-            if pr.number == number:
-                return index == self.merged_index
-        return False
-
-    def merge_pr(self, number):
-        self.calls.append('merge_pr')
-
-        for index, pr in enumerate(self.pull_requests):
-            if pr.number == number and index == self.unsuccessful_merge_index:
-                raise MergeError(number)
-
-        self.pull_requests_merged.append(number)
-
-    def create_pr(self, remote_branch_name, desc_title, body):
-        self.calls.append('create_pr')
-
-        if self.create_pr_fail_index != self.create_pr_index:
-            self.pull_requests_created.append((remote_branch_name, desc_title, body))
-
-        self.create_pr_index += 1
-        return 5678
-
-    def update_pr(self, pr_number, desc_title, body):
-        self.calls.append('update_pr')
-        return 5678
-
-    def delete_remote_branch(self, _):
-        self.calls.append('delete_remote_branch')
-
-    def add_label(self, _, label):
-        self.calls.append('add_label "%s"' % label)
-
-    def remove_label(self, _, label):
-        self.calls.append('remove_label "%s"' % label)
-
-    def get_pr_branch(self, number):
-        self.calls.append('get_pr_branch')
-        return 'fake_branch_PR_%d' % number
-
-    def pr_for_chromium_commit(self, commit):
-        self.calls.append('pr_for_chromium_commit')
-        for pr in self.pull_requests:
-            if commit.change_id() in pr.body:
-                return pr
-        return None
-
-    def pr_with_position(self, position):
-        self.calls.append('pr_with_position')
-        for pr in self.pull_requests:
-            if position in pr.body:
-                return pr
-        return None
-
-    def pr_with_change_id(self, change_id):
-        self.calls.append('pr_with_change_id')
-        for pr in self.pull_requests:
-            if change_id in pr.body:
-                return pr
-        return None
-
-    def extract_metadata(self, tag, commit_body, all_matches=False):
-        return WPTGitHub.extract_metadata(tag, commit_body, all_matches)

Deleted: trunk/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py (225741 => 225742)


--- trunk/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py	2017-12-11 09:11:19 UTC (rev 225741)
+++ trunk/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py	2017-12-11 10:16:55 UTC (rev 225742)
@@ -1,48 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#    * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#    * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import base64
-import unittest
-
-from webkitpy.common.host_mock import MockHost
-from webkitpy.w3c.wpt_github import WPTGitHub, MergeError
-
-
-class WPTGitHubTest(unittest.TestCase):
-
-    def setUp(self):
-        self.wpt_github = WPTGitHub(MockHost(), user='rutabaga', token='decafbad')
-
-    def test_init(self):
-        self.assertEqual(self.wpt_github.user, 'rutabaga')
-        self.assertEqual(self.wpt_github.token, 'decafbad')
-
-    def test_auth_token(self):
-        self.assertEqual(
-            self.wpt_github.auth_token(),
-            base64.encodestring('rutabaga:decafbad').strip())
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to