Changeset 253128 in webkit


Ignore:
Timestamp:
Dec 4, 2019 4:10:42 PM (4 years ago)
Author:
Jonathan Bedard
Message:

Python 3: Add support in webkitpy.tool
https://bugs.webkit.org/show_bug.cgi?id=204838

Reviewed by Stephanie Lewis.

  • Scripts/test-webkitpy-python3: Add webkitpy.tool.
  • Scripts/webkit-patch: Remove version check.
  • Scripts/webkitpy/common/net/bugzilla/bug.py:

(Bug.reviewed_patches): Convert filter to list.
(Bug.commit_queued_patches): Ditto.

  • Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:

(MockBugzillaQueries.fetch_bug_ids_from_commit_queue): Convert map to list.
(MockBugzillaQueries.fetch_attachment_ids_from_review_queue): Ditto.
(MockBugzillaQueries.fetch_bug_ids_from_pending_commit_list): Ditto.
(MockBugzilla.post_comment_to_bug): Sort cc list before printing.

  • Scripts/webkitpy/common/net/statusserver.py:

(StatusServer.set_api_key): Convert filter to list.

  • Scripts/webkitpy/common/net/web.py:

(Web.get_binary): Use Python 2/3 compatible urlopen.
(Web.request): Use Python 2/3 compatible Request.

  • Scripts/webkitpy/common/prettypatch.py:

(PrettyPatch.pretty_diff_file): Encode diff before printing.

  • Scripts/webkitpy/common/system/executive_mock.py:

(MockExecutive.run_and_throw_if_fail): Sort environment before printing.
(MockExecutive.run_command): Convert input to string before printing.

  • Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:

(FailingTestCommitQueue.test_results): Convert map to list.
(MockSimpleTestPlanCommitQueue.test_results): Ditto.

  • Scripts/webkitpy/tool/bot/feeders.py:

(CommitQueueFeeder.feed): Use Python 2/3 compatible sort.
(CommitQueueFeeder._patch_cmp): Deleted.

  • Scripts/webkitpy/tool/bot/flakytestreporter.py:

(FlakyTestReporter._lookup_bug_for_flaky_test): Convert filter to list.

  • Scripts/webkitpy/tool/bot/irc_command.py:

(Whois.execute): Convert map to list.

  • Scripts/webkitpy/tool/bot/retrylogic_unittest.py:

(JSCEarlyWarningSystemTest._create_task): Convert map to list.

  • Scripts/webkitpy/tool/bot/sheriff.py:
  • Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Use sorted lists

Instead of sets.

  • Scripts/webkitpy/tool/commands/download.py:

(AbstractPatchSequencingCommand.init): Use Python 2/3 compatible sort.

  • Scripts/webkitpy/tool/commands/download_unittest.py: Sort environment.
  • Scripts/webkitpy/tool/commands/earlywarningsystem.py:

(AbstractEarlyWarningSystem.load_ews_classes): str.translate differs between Python 2
and Python 3.

  • Scripts/webkitpy/tool/commands/newcommitbot.py:

(NewCommitBot._summarize_commit_log): Convert filter to list.

  • Scripts/webkitpy/tool/commands/queues.py:

(AbstractQueue.should_continue_work_queue): Handle case where iterations is a MagicMock.
(AbstractQueue._log_from_script_error_for_upload): Explicitly use BytesIO

  • Scripts/webkitpy/tool/commands/queues_unittest.py: Use explicit import paths.
  • Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Sort lists before comparing them.
  • Scripts/webkitpy/tool/commands/stepsequence.py:

(StepSequence.options): Use Python 2/3 compatible sort.

  • Scripts/webkitpy/tool/commands/suggestnominations.py:

(AbstractCommitLogCommand.init): Use Python 2/3 compatible sort.
(SuggestNominations._print_nominations): Ditto.
(SuggestNominations._print_counts): Ditto.
(SuggestNominations._print_nominations.nomination_cmp): Deleted.
(SuggestNominations._print_counts.counter_cmp): Deleted.

  • Scripts/webkitpy/tool/mocktool_unittest.py: Use explicit import paths.
  • Scripts/webkitpy/tool/multicommandtool.py:

(HelpCommand._help_epilog): Convert filter to list, use Python 2/3 compatible sort.
(MultiCommandTool._find_all_commands): Use Python 2/3 compatible sort.

  • Scripts/webkitpy/tool/servers/gardeningserver.py:

(GardeningHTTPServer): Use Python 2/3 compatible HTTPServers.

  • Scripts/webkitpy/tool/servers/rebaselineserver.py:

(get_test_baselines.AllPlatformsPort.baseline_search_path): Use list instead of utterable keys.
(RebaselineHTTPServer): Use Python 2/3 compatible HTTPServers.
(RebaselineHTTPServer.init): Ditto.

  • Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:

(GetActualResultFilesTest.test): Use assertEqual instead of assertItemsEqual.

  • Scripts/webkitpy/tool/servers/reflectionhandler.py:

(ReflectionHandler): Use Python 2/3 compatible HTTPServers.

  • Scripts/webkitpy/tool/steps/applywatchlist.py:

(ApplyWatchList.run): Sort cc_emails before printing.

  • Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Print sorted list instead

of set.

  • Scripts/webkitpy/tool/steps/confirmdiff.py:

(ConfirmDiff._show_pretty_diff): Use Python 2/3 compatible pathname2url.

  • Scripts/webkitpy/tool/steps/haslanded.py:

(HasLanded.convert_to_svn): Use Python 2/3 compatible StringIO.
(HasLanded.strip_change_log): Ditto.

  • Scripts/webkitpy/tool/steps/preparechangelog.py:

(PrepareChangeLog._resolve_existing_entry): Convert zip object to list.

  • Scripts/webkitpy/tool/steps/promptforbugortitle.py: Use Python 2/3 compatible urlparse.
  • Scripts/webkitpy/tool/steps/steps_unittest.py: Sort environment.
  • Scripts/webkitpy/w3c/test_exporter.py: Use Python 2/3 compatible HTTPError.
  • Scripts/webkitpy/w3c/wpt_github.py:

(WPTGitHub.remove_label): Use Python 2/3 compatible urllib.quote.
(WPTGitHub.is_pr_merged): Use Python 2/3 compatible HTTPError.
(WPTGitHub.merge_pr): Ditto.
(JSONResponse.init):

Location:
trunk/Tools
Files:
40 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r253117 r253128  
     12019-12-04  Jonathan Bedard  <jbedard@apple.com>
     2
     3        Python 3: Add support in webkitpy.tool
     4        https://bugs.webkit.org/show_bug.cgi?id=204838
     5
     6        Reviewed by Stephanie Lewis.
     7
     8        * Scripts/test-webkitpy-python3: Add webkitpy.tool.
     9        * Scripts/webkit-patch: Remove version check.
     10        * Scripts/webkitpy/common/net/bugzilla/bug.py:
     11        (Bug.reviewed_patches): Convert filter to list.
     12        (Bug.commit_queued_patches): Ditto.
     13        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
     14        (MockBugzillaQueries.fetch_bug_ids_from_commit_queue): Convert map to list.
     15        (MockBugzillaQueries.fetch_attachment_ids_from_review_queue): Ditto.
     16        (MockBugzillaQueries.fetch_bug_ids_from_pending_commit_list): Ditto.
     17        (MockBugzilla.post_comment_to_bug): Sort cc list before printing.
     18        * Scripts/webkitpy/common/net/statusserver.py:
     19        (StatusServer.set_api_key): Convert filter to list.
     20        * Scripts/webkitpy/common/net/web.py:
     21        (Web.get_binary): Use Python 2/3 compatible urlopen.
     22        (Web.request): Use Python 2/3 compatible Request.
     23        * Scripts/webkitpy/common/prettypatch.py:
     24        (PrettyPatch.pretty_diff_file): Encode diff before printing.
     25        * Scripts/webkitpy/common/system/executive_mock.py:
     26        (MockExecutive.run_and_throw_if_fail): Sort environment before printing.
     27        (MockExecutive.run_command): Convert input to string before printing.
     28        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
     29        (FailingTestCommitQueue.test_results): Convert map to list.
     30        (MockSimpleTestPlanCommitQueue.test_results): Ditto.
     31        * Scripts/webkitpy/tool/bot/feeders.py:
     32        (CommitQueueFeeder.feed): Use Python 2/3 compatible sort.
     33        (CommitQueueFeeder._patch_cmp): Deleted.
     34        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
     35        (FlakyTestReporter._lookup_bug_for_flaky_test): Convert filter to list.
     36        * Scripts/webkitpy/tool/bot/irc_command.py:
     37        (Whois.execute): Convert map to list.
     38        * Scripts/webkitpy/tool/bot/retrylogic_unittest.py:
     39        (JSCEarlyWarningSystemTest._create_task): Convert map to list.
     40        * Scripts/webkitpy/tool/bot/sheriff.py:
     41        * Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py: Use sorted lists
     42        Instead of sets.
     43        * Scripts/webkitpy/tool/commands/download.py:
     44        (AbstractPatchSequencingCommand.__init__): Use Python 2/3 compatible sort.
     45        * Scripts/webkitpy/tool/commands/download_unittest.py: Sort environment.
     46        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
     47        (AbstractEarlyWarningSystem.load_ews_classes): str.translate differs between Python 2
     48        and Python 3.
     49        * Scripts/webkitpy/tool/commands/newcommitbot.py:
     50        (NewCommitBot._summarize_commit_log): Convert filter to list.
     51        * Scripts/webkitpy/tool/commands/queues.py:
     52        (AbstractQueue.should_continue_work_queue): Handle case where iterations is a MagicMock.
     53        (AbstractQueue._log_from_script_error_for_upload): Explicitly use BytesIO
     54        * Scripts/webkitpy/tool/commands/queues_unittest.py: Use explicit import paths.
     55        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Sort lists before comparing them.
     56        * Scripts/webkitpy/tool/commands/stepsequence.py:
     57        (StepSequence.options): Use Python 2/3 compatible sort.
     58        * Scripts/webkitpy/tool/commands/suggestnominations.py:
     59        (AbstractCommitLogCommand.__init__): Use Python 2/3 compatible sort.
     60        (SuggestNominations._print_nominations): Ditto.
     61        (SuggestNominations._print_counts): Ditto.
     62        (SuggestNominations._print_nominations.nomination_cmp): Deleted.
     63        (SuggestNominations._print_counts.counter_cmp): Deleted.
     64        * Scripts/webkitpy/tool/mocktool_unittest.py: Use explicit import paths.
     65        * Scripts/webkitpy/tool/multicommandtool.py:
     66        (HelpCommand._help_epilog): Convert filter to list, use Python 2/3 compatible sort.
     67        (MultiCommandTool._find_all_commands): Use Python 2/3 compatible sort.
     68        * Scripts/webkitpy/tool/servers/gardeningserver.py:
     69        (GardeningHTTPServer): Use Python 2/3 compatible HTTPServers.
     70        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
     71        (get_test_baselines.AllPlatformsPort.baseline_search_path): Use list instead of utterable keys.
     72        (RebaselineHTTPServer): Use Python 2/3 compatible HTTPServers.
     73        (RebaselineHTTPServer.__init__): Ditto.
     74        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
     75        (GetActualResultFilesTest.test): Use assertEqual instead of assertItemsEqual.
     76        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
     77        (ReflectionHandler): Use Python 2/3 compatible HTTPServers.
     78        * Scripts/webkitpy/tool/steps/applywatchlist.py:
     79        (ApplyWatchList.run): Sort cc_emails before printing.
     80        * Scripts/webkitpy/tool/steps/applywatchlist_unittest.py: Print sorted list instead
     81        of set.
     82        * Scripts/webkitpy/tool/steps/confirmdiff.py:
     83        (ConfirmDiff._show_pretty_diff): Use Python 2/3 compatible pathname2url.
     84        * Scripts/webkitpy/tool/steps/haslanded.py:
     85        (HasLanded.convert_to_svn): Use Python 2/3 compatible StringIO.
     86        (HasLanded.strip_change_log): Ditto.
     87        * Scripts/webkitpy/tool/steps/preparechangelog.py:
     88        (PrepareChangeLog._resolve_existing_entry): Convert zip object to list.
     89        * Scripts/webkitpy/tool/steps/promptforbugortitle.py: Use Python 2/3 compatible urlparse.
     90        * Scripts/webkitpy/tool/steps/steps_unittest.py: Sort environment.
     91        * Scripts/webkitpy/w3c/test_exporter.py: Use Python 2/3 compatible HTTPError.
     92        * Scripts/webkitpy/w3c/wpt_github.py:
     93        (WPTGitHub.remove_label): Use Python 2/3 compatible urllib.quote.
     94        (WPTGitHub.is_pr_merged): Use Python 2/3 compatible HTTPError.
     95        (WPTGitHub.merge_pr): Ditto.
     96        (JSONResponse.__init__):
     97
    1982019-12-04  Jonathan Bedard  <jbedard@apple.com>
    299
  • trunk/Tools/Scripts/test-webkitpy-python3

    r252560 r253128  
    4242  'webkitpy.layout_tests.views',
    4343  'webkitpy.port',
     44  'webkitpy.tool',
    4445  'webkitpy.results',
    4546  'webkitpy.style',
  • trunk/Tools/Scripts/webkit-patch

    r117049 r253128  
    3838import sys
    3939import codecs
    40 
    41 import webkitpy.common.version_check
    4240
    4341from webkitpy.common.system.logutils import configure_logging
  • trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bug.py

    r251112 r253128  
    111111        # Checking reviewer() ensures that it was both reviewed and has a valid
    112112        # reviewer.
    113         return filter(lambda patch: patch.reviewer(), patches)
     113        return list(filter(lambda patch: patch.reviewer(), patches))
    114114
    115115    def commit_queued_patches(self, include_invalid=False):
     
    120120        # Checking committer() ensures that it was both commit-queue+'d and has
    121121        # a valid committer.
    122         return filter(lambda patch: patch.committer(), patches)
     122        return list(filter(lambda patch: patch.committer(), patches))
    123123
    124124    def comments(self):
  • trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py

    r251112 r253128  
    324324                lambda bug: bug.commit_queued_patches(),
    325325                self._all_bugs())
    326         return map(lambda bug: bug.id(), bugs_with_commit_queued_patches)
     326        return list(map(lambda bug: bug.id(), bugs_with_commit_queued_patches))
    327327
    328328    def fetch_attachment_ids_from_review_queue(self, since=None, only_security_bugs=False):
     
    334334        if only_security_bugs:
    335335            unreviewed_patches = filter(lambda patch: patch.bug().is_security_sensitive(), unreviewed_patches)
    336         return map(lambda patch: patch.id(), unreviewed_patches)
     336        return list(map(lambda patch: patch.id(), unreviewed_patches))
    337337
    338338    def fetch_patches_from_commit_queue(self):
     
    343343        bugs_with_reviewed_patches = filter(lambda bug: bug.reviewed_patches(),
    344344                                            self._all_bugs())
    345         bug_ids = map(lambda bug: bug.id(), bugs_with_reviewed_patches)
     345        bug_ids = list(map(lambda bug: bug.id(), bugs_with_reviewed_patches))
    346346        # NOTE: This manual hack here is to allow testing logging in
    347347        # test_assign_to_committer the real pending-commit query on bugzilla
     
    471471    def post_comment_to_bug(self, bug_id, comment_text, cc=None, see_also=None):
    472472        _log.info("MOCK bug comment: bug_id=%s, cc=%s, see_also=%s\n--- Begin comment ---\n%s\n--- End comment ---\n" % (
    473                   bug_id, cc, see_also, comment_text))
     473                  bug_id, sorted(cc or []) or None, see_also, comment_text))
    474474
    475475    def add_attachment_to_bug(self, bug_id, file_or_string, description, filename=None, comment_text=None, mimetype=None):
  • trunk/Tools/Scripts/webkitpy/common/net/statusserver.py

    r251374 r253128  
    7171    def set_api_key(self, api_key):
    7272        self._api_key = str(api_key)
    73         new_headers = filter(lambda header: header[0] != self._AUTHORIZATION_HEADER_NAME, self._browser.addheaders)
     73        new_headers = list(filter(lambda header: header[0] != self._AUTHORIZATION_HEADER_NAME, self._browser.addheaders))
    7474        if api_key:
    7575            new_headers.append(self._authorization_header_name_and_value_pair())
  • trunk/Tools/Scripts/webkitpy/common/net/web.py

    r226009 r253128  
    2727# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828
    29 import urllib2
     29import sys
    3030
    3131from webkitpy.common.net.networktransaction import NetworkTransaction
     32
     33if sys.version_info > (3, 0):
     34    from urllib.request import build_opener, Request, urlopen, HTTPHandler
     35else:
     36    from urllib2 import urlopen, build_opener, Request, HTTPHandler
    3237
    3338
    3439class Web(object):
    3540    def get_binary(self, url, convert_404_to_None=False):
    36         return NetworkTransaction(convert_404_to_None=convert_404_to_None).run(lambda: urllib2.urlopen(url).read())
     41        return NetworkTransaction(convert_404_to_None=convert_404_to_None).run(lambda: urlopen(url).read())
    3742
    3843    def request(self, method, url, data, headers=None):
    39         opener = urllib2.build_opener(urllib2.HTTPHandler)
    40         request = urllib2.Request(url=url, data=data)
     44        opener = build_opener(HTTPHandler)
     45        request = Request(url=url, data=data)
    4146        request.get_method = lambda: method
    4247
  • trunk/Tools/Scripts/webkitpy/common/prettypatch.py

    r225733 r253128  
    3232import tempfile
    3333from webkitpy.common.system.executive import ScriptError
     34from webkitpy.common.unicode_compatibility import encode_if_necessary
    3435
    3536_log = logging.getLogger(__name__)
     
    5051        # Diffs can contain multiple text files of different encodings
    5152        # so we always deal with them as byte arrays, not unicode strings.
    52         assert(isinstance(diff, str))
    53         pretty_diff = self.pretty_diff(diff)
     53        diff = encode_if_necessary(diff)
     54        pretty_diff = encode_if_necessary(self.pretty_diff(diff))
    5455        diff_file = tempfile.NamedTemporaryFile(suffix=".html")
    5556        diff_file.write(pretty_diff)
  • trunk/Tools/Scripts/webkitpy/common/system/executive_mock.py

    r252738 r253128  
    3030import os
    3131
    32 from webkitpy.common.unicode_compatibility import BytesIO, encode_if_necessary, unicode
     32from webkitpy.common.unicode_compatibility import BytesIO, decode_for, encode_if_necessary, unicode
    3333from webkitpy.common.system.executive import ScriptError
    3434
     
    100100            env_string = ""
    101101            if env:
    102                 env_string = ", env=%s" % env
     102                for key in sorted(env.keys()):
     103                    if len(env_string):
     104                        env_string += ", "
     105                    env_string += "'{}': '{}'".format(key, env[key])
     106                env_string = ", env={" + env_string + "}"
    103107            _log.info("MOCK run_and_throw_if_fail: %s, cwd=%s%s" % (args, cwd, env_string))
    104108        if self._should_throw_when_run.intersection(args):
     
    127131            env_string = ""
    128132            if env:
    129                 env_string = ", env=%s" % env
     133                for key in sorted(env.keys()):
     134                    if len(env_string):
     135                        env_string += ", "
     136                    env_string += "'{}': '{}'".format(key, env[key])
     137                env_string = ", env={" + env_string + "}"
    130138            input_string = ""
    131139            if input:
    132                 input_string = ", input=%s" % input
     140                input_string = ", input=%s" % decode_for(input, str)
    133141            _log.info("MOCK run_command: %s, cwd=%s%s%s" % (args, cwd, env_string, input_string))
    134142        output = "MOCK output of child process"
  • trunk/Tools/Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py

    r252943 r253128  
    113113        failures_for_run = self._test_failure_plan[self._test_run_counter]
    114114        assert(isinstance(failures_for_run, list))
    115         results = LayoutTestResults(test_results=map(self._mock_test_result, failures_for_run), did_exceed_test_failure_limit=(len(failures_for_run) >= 10))
     115        results = LayoutTestResults(test_results=list(map(self._mock_test_result, failures_for_run)), did_exceed_test_failure_limit=(len(failures_for_run) >= 10))
    116116        return results
    117117
     
    148148    def test_results(self):
    149149        assert(isinstance(self._current_test_results, list))
    150         return LayoutTestResults(test_results=map(self._mock_test_result, self._current_test_results), did_exceed_test_failure_limit=(len(self._current_test_results) >= 10))
     150        return LayoutTestResults(test_results=list(map(self._mock_test_result, self._current_test_results)), did_exceed_test_failure_limit=(len(self._current_test_results) >= 10))
    151151
    152152    def did_run_clean_tests(self):
     
    160160
    161161
    162 _lots_of_failing_tests = map(lambda num: "test-%s.html" % num, range(0, 100))
     162_lots_of_failing_tests = list(map(lambda num: "test-%s.html" % num, range(0, 100)))
    163163
    164164
  • trunk/Tools/Scripts/webkitpy/tool/bot/feeders.py

    r232979 r253128  
    5555        patches = self._validate_patches()
    5656        patches = self._patches_with_acceptable_review_flag(patches)
    57         patches = sorted(patches, self._patch_cmp)
     57        patches = sorted(patches, key=lambda patch: patch.attach_date() or 0)
    5858
    5959        high_priority_item_ids = [patch.id() for patch in patches if patch.is_rollout()]
     
    7575        all_patches = sum([self._patches_for_bug(bug_id) for bug_id in bug_ids], [])
    7676        return self.committer_validator.patches_after_rejecting_invalid_commiters_and_reviewers(all_patches)
    77 
    78     def _patch_cmp(self, a, b):
    79         return cmp(a.attach_date(), b.attach_date())
    8077
    8178
  • trunk/Tools/Scripts/webkitpy/tool/bot/flakytestreporter.py

    r170637 r253128  
    7474        # Match any bugs which are from known bots or the email this bot is using.
    7575        allowed_emails = self._bot_emails | set([self._bugzilla_email])
    76         bugs = filter(lambda bug: bug.reporter_email() in allowed_emails, bugs)
     76        bugs = list(filter(lambda bug: bug.reporter_email() in allowed_emails, bugs))
    7777        if not bugs:
    7878            return None
  • trunk/Tools/Scripts/webkitpy/tool/bot/irc_command.py

    r238618 r253128  
    3636from webkitpy.common.net.web import Web
    3737from webkitpy.common.system.executive import ScriptError
     38from webkitpy.common.unicode_compatibility import unicode
    3839from webkitpy.tool.bot.queueengine import TerminateQueue
    3940from webkitpy.tool.grammar import join_with_separators
     
    283284                return unicode("%s: %s hasn't told me their nick. Boo hoo :-(") % (nick, contributor)
    284285            return unicode("%s: %s is %s. Why do you ask?") % (nick, search_string, self._full_record_and_nick(contributor))
    285         contributor_nicks = map(self._full_record_and_nick, contributors)
     286        contributor_nicks = list(map(self._full_record_and_nick, contributors))
    286287        contributors_string = join_with_separators(contributor_nicks, only_two_separator=" or ", last_separator=', or ')
    287288        return unicode("%s: I'm not sure who you mean?  %s could be '%s'.") % (nick, contributors_string, search_string)
  • trunk/Tools/Scripts/webkitpy/tool/bot/retrylogic_unittest.py

    r224547 r253128  
    8686        tool = MockTool(log_executive=True)
    8787        patch = tool.bugs.fetch_attachment(10000)
    88         patches_passed_all_tests = map(self._results_indicate_all_passed, [second_test_results, first_test_results])
     88        patches_passed_all_tests = list(map(self._results_indicate_all_passed, [second_test_results, first_test_results]))
    8989        return MockPatchAnalysisTask(queue, patch, patches_passed_all_tests)
    9090
  • trunk/Tools/Scripts/webkitpy/tool/bot/sheriff.py

    r148180 r253128  
    3030from webkitpy.common.system.executive import ScriptError
    3131from webkitpy.tool.grammar import join_with_separators
     32
     33from functools import reduce
    3234
    3335
  • trunk/Tools/Scripts/webkitpy/tool/commands/applywatchlistlocal_unittest.py

    r249067 r253128  
    4444    def test_args_parsing_with_bug(self):
    4545        expected_logs = """MockWatchList: determine_cc_and_messages
    46 MOCK bug comment: bug_id=50002, cc=set(['eric@webkit.org', 'levin@chromium.org', 'abarth@webkit.org']), see_also=None
     46MOCK bug comment: bug_id=50002, cc=['abarth@webkit.org', 'eric@webkit.org', 'levin@chromium.org'], see_also=None
    4747--- Begin comment ---
    4848Message1.
     
    5050Message2.
    5151--- End comment ---\n
    52 Result of watchlist: cc "eric@webkit.org, levin@chromium.org, abarth@webkit.org" messages "Message1.
     52Result of watchlist: cc "abarth@webkit.org, eric@webkit.org, levin@chromium.org" messages "Message1.
    5353
    5454Message2."
  • trunk/Tools/Scripts/webkitpy/tool/commands/download.py

    r233219 r253128  
    196196        self._prepare_sequence = StepSequence(self.prepare_steps)
    197197        self._main_sequence = StepSequence(self.main_steps)
    198         options = sorted(set(self._prepare_sequence.options() + self._main_sequence.options()))
     198        options = sorted(set(self._prepare_sequence.options() + self._main_sequence.options()), key=lambda option: option.dest)
    199199        AbstractPatchProcessingCommand.__init__(self, options)
    200200
  • trunk/Tools/Scripts/webkitpy/tool/commands/download_unittest.py

    r223796 r253128  
    163163Was that diff correct?
    164164Building WebKit
    165 MOCK run_and_throw_if_fail: ['mock-build-webkit', 'ARCHS=MOCK ARCH'], cwd=/mock-checkout, env={'TERM': 'dumb', 'MOCK_ENVIRON_COPY': '1'}
     165MOCK run_and_throw_if_fail: ['mock-build-webkit', 'ARCHS=MOCK ARCH'], cwd=/mock-checkout, env={'MOCK_ENVIRON_COPY': '1', 'TERM': 'dumb'}
    166166Running Python unit tests
    167167MOCK run_and_throw_if_fail: ['mock-test-webkitpy'], cwd=/mock-checkout
  • trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem.py

    r233288 r253128  
    3232import os
    3333from optparse import make_option
     34import sys
    3435
    3536from webkitpy.common.config.committers import CommitterList
     
    3738from webkitpy.common.system.filesystem import FileSystem
    3839from webkitpy.common.system.executive import ScriptError
     40from webkitpy.common.unicode_compatibility import encode_for
    3941from webkitpy.tool.bot.earlywarningsystemtask import EarlyWarningSystemTask, EarlyWarningSystemTaskDelegate
    4042from webkitpy.tool.bot.bindingstestresultsreader import BindingsTestResultsReader
     
    175177
    176178        classes = []
    177         for name, config in ewses.iteritems():
    178             classes.append(type(name.encode('utf-8').translate(None, ' -'), (cls,), {
     179        for name, config in ewses.items():
     180            if sys.version_info > (3, 0):
     181                translated = encode_for(name, str).translate(' -')
     182            else:
     183                translated = encode_for(name, str).translate(None, ' -')
     184
     185            classes.append(type(translated, (cls,), {
    179186                'name': config.get('name', config['port'] + '-ews'),
    180187                'port_name': config['port'],
  • trunk/Tools/Scripts/webkitpy/tool/commands/newcommitbot.py

    r211134 r253128  
    159159            lines[0] = '%s rolled out %s in %s' % (author, rollout.group('revisions'), linkified_revision)
    160160
    161         return ' '.join(filter(lambda line: len(line), lines)[0:4])
     161        return ' '.join(list(filter(lambda line: len(line), lines))[0:4])
    162162
    163163    def handle_unexpected_error(self, failure_map, message):
  • trunk/Tools/Scripts/webkitpy/tool/commands/queues.py

    r233288 r253128  
    3737
    3838from optparse import make_option
    39 from StringIO import StringIO
    4039
    4140from webkitpy.common.config.committervalidator import CommitterValidator
     
    4342from webkitpy.common.net.bugzilla import Bugzilla, Attachment
    4443from webkitpy.common.system.executive import ScriptError
     44from webkitpy.common.unicode_compatibility import BytesIO
    4545from webkitpy.tool.bot.botinfo import BotInfo
    4646from webkitpy.tool.bot.commitqueuetask import CommitQueueTask, CommitQueueTaskDelegate
     
    136136    def should_continue_work_queue(self):
    137137        self._iteration_count += 1
     138        if not isinstance(self._options.iterations, int):
     139            return True
    138140        return not self._options.iterations or self._iteration_count <= self._options.iterations
    139141
     
    164166        # to status_server, because ClientForm (part of mechanize)
    165167        # wants a file-like object with pre-encoded data.
    166         return StringIO(output.encode("utf-8"))
     168        return BytesIO(output.encode("utf-8"))
    167169
    168170    @classmethod
  • trunk/Tools/Scripts/webkitpy/tool/commands/queues_unittest.py

    r244923 r253128  
    2929
    3030import os
    31 import StringIO
    3231
    3332from webkitpy.common.checkout.scm import CheckoutNeedsUpdate
     
    3635from webkitpy.common.net.bugzilla import Attachment
    3736from webkitpy.common.system.outputcapture import OutputCapture
     37from webkitpy.common.unicode_compatibility import StringIO
    3838from webkitpy.layout_tests.models import test_results
    3939from webkitpy.layout_tests.models import test_failures
  • trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py

    r226715 r253128  
    109109        self.command._rebaseline_test_and_update_expectations(self.options)
    110110
    111         self.assertItemsEqual(self.tool.web.urls_fetched,
    112             [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
    113              self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
    114              self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
     111        self.assertEquals(
     112            sorted(self.tool.web.urls_fetched), [
     113                self.WEB_PREFIX + '/userscripts/another-test-actual.png',
     114                self.WEB_PREFIX + '/userscripts/another-test-actual.txt',
     115                self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
     116            ])
    115117        new_expectations = self._read(self.lion_expectations_path)
    116118        self.assertMultiLineEqual(new_expectations, """Bug(B) [ Mac Linux XP Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]
     
    125127        self.command._rebaseline_test_and_update_expectations(self.options)
    126128
    127         self.assertItemsEqual(self.tool.web.urls_fetched,
    128             [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
    129              self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
    130              self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
     129        self.assertEquals(
     130            sorted(self.tool.web.urls_fetched), [
     131                self.WEB_PREFIX + '/userscripts/another-test-actual.png',
     132                self.WEB_PREFIX + '/userscripts/another-test-actual.txt',
     133                self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
     134            ])
    131135        new_expectations = self._read(self.lion_expectations_path)
    132136        self.assertMultiLineEqual(new_expectations, "Bug(x) [ Mac ] userscripts/another-test.html [ ImageOnlyFailure ]\nbug(z) [ Linux ] userscripts/another-test.html [ ImageOnlyFailure ]\n")
     
    139143        self.command._rebaseline_test_and_update_expectations(self.options)
    140144
    141         self.assertItemsEqual(self.tool.web.urls_fetched,
    142             [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
    143              self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
    144              self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
     145        self.assertEquals(
     146            sorted(self.tool.web.urls_fetched), [
     147                self.WEB_PREFIX + '/userscripts/another-test-actual.png',
     148                self.WEB_PREFIX + '/userscripts/another-test-actual.txt',
     149                self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
     150            ])
    145151
    146152        new_expectations = self._read(self.lion_expectations_path)
     
    149155    def test_rebaseline_test(self):
    150156        self.command._rebaseline_test("Apple Lion Release WK1 (Tests)", "userscripts/another-test.html", None, "txt", self.WEB_PREFIX)
    151         self.assertItemsEqual(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
     157        self.assertEquals(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
    152158
    153159    def test_rebaseline_test_with_results_directory(self):
     
    155161        self.options.results_directory = '/tmp'
    156162        self.command._rebaseline_test_and_update_expectations(self.options)
    157         self.assertItemsEqual(self.tool.web.urls_fetched, ['file:///tmp/userscripts/another-test-actual.txt'])
     163        self.assertEquals(self.tool.web.urls_fetched, ['file:///tmp/userscripts/another-test-actual.txt'])
    158164
    159165    def test_rebaseline_test_and_print_scm_changes(self):
     
    185191        self.command._rebaseline_test("Apple Lion Release WK1 (Tests)", "userscripts/another-test.html", ["mac-lion-wk2"], "txt", self.WEB_PREFIX)
    186192
    187         self.assertItemsEqual(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
     193        self.assertEquals(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
    188194        self.assertMultiLineEqual(self._read("platform/mac-lion-wk2/userscripts/another-test-expected.txt"), "original lion result")
    189195        self.assertMultiLineEqual(self._read("platform/mac-lion-wk1/userscripts/another-test-expected.txt"), self.MOCK_WEB_RESULT)
     
    296302            builders._exact_matches = old_exact_matches
    297303
    298         calls = filter(lambda x: x[0] not in ['perl', '/usr/bin/xcrun', '/usr/bin/ulimit'], self.tool.executive.calls)
     304        calls = list(filter(lambda x: x[0] not in ['perl', '/usr/bin/xcrun', '/usr/bin/ulimit'], self.tool.executive.calls))
    299305        self.assertEqual(calls,
    300306            [[['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--builder', 'MOCK builder', '--test', 'mock/path/to/test.html', '--verbose']]])
     
    318324
    319325        # FIXME: change this to use the test- ports.
    320         calls = filter(lambda x: x[0] not in ['perl', '/usr/bin/xcrun', '/usr/bin/ulimit'], self.tool.executive.calls)
     326        calls = list(filter(lambda x: x[0] not in ['perl', '/usr/bin/xcrun', '/usr/bin/ulimit'], self.tool.executive.calls))
    321327        self.assertEqual(len(calls), 1)
    322328        self.assertEqual(len(calls[0]), 22)
  • trunk/Tools/Scripts/webkitpy/tool/commands/stepsequence.py

    r232222 r253128  
    6060            collected_options = collected_options + step.options()
    6161        # Remove duplicates.
    62         collected_options = sorted(set(collected_options))
     62        collected_options = sorted(set(collected_options), key=lambda option: option.dest)
    6363        return collected_options
    6464
  • trunk/Tools/Scripts/webkitpy/tool/commands/suggestnominations.py

    r225733 r253128  
    6060            make_option("--max-commit-age", action="store", dest="max_commit_age", type="int", default=9, help="Specify maximum commit age to consider (in months)."),
    6161        ]
    62         options = sorted(options, cmp=lambda a, b: cmp(a._long_opts, b._long_opts))
     62        options = sorted(options, key=lambda option: option.dest)
    6363        super(AbstractCommitLogCommand, self).__init__(options=options)
    6464        # FIXME: This should probably be on the tool somewhere.
     
    244244
    245245    def _print_nominations(self, nominations, counters_by_email):
    246         def nomination_cmp(a_nomination, b_nomination):
    247             roles_result = cmp(a_nomination['roles'], b_nomination['roles'])
    248             if roles_result:
    249                 return -roles_result
    250             count_result = cmp(a_nomination['patch_count'], b_nomination['patch_count'])
    251             if count_result:
    252                 return -count_result
    253             return cmp(a_nomination['author_name'], b_nomination['author_name'])
    254 
    255         for nomination in sorted(nominations, nomination_cmp):
     246        nominations = sorted(nominations, key=lambda a: a['roles'])
     247        nominations = sorted(nominations, key=lambda a: a['patch_count'])
     248        nominations = sorted(nominations, key=lambda a: a['author_name'])
     249
     250        for nomination in nominations:
    256251            # This is a little bit of a hack, but its convienent to just pass the nomination dictionary to the formating operator.
    257252            nomination['roles_string'] = grammar.join_with_separators(nomination['roles']).upper()
     
    263258
    264259    def _print_counts(self, counters_by_email):
    265         def counter_cmp(a_tuple, b_tuple):
    266             # split the tuples
    267             # the second element is the "counter" structure
    268             _, a_counter = a_tuple
    269             _, b_counter = b_tuple
    270 
    271             count_result = cmp(a_counter['count'], b_counter['count'])
    272             if count_result:
    273                 return -count_result
    274             return cmp(a_counter['latest_name'].lower(), b_counter['latest_name'].lower())
    275 
    276         for author_email, counter in sorted(counters_by_email.items(), counter_cmp):
     260        counters = sorted(counters_by_email.items(), key=lambda counter: counter[1]['count'])
     261        counters = sorted(counters, key=lambda counter: counter[1]['latest_name'])
     262
     263        for author_email, counter in counters:
    277264            if author_email != counter['latest_email']:
    278265                continue
  • trunk/Tools/Scripts/webkitpy/tool/mocktool_unittest.py

    r174136 r253128  
    2929import unittest
    3030
    31 from mocktool import MockOptions
     31from webkitpy.tool.mocktool import MockOptions
    3232
    3333
  • trunk/Tools/Scripts/webkitpy/tool/multicommandtool.py

    r225733 r253128  
    180180        else:
    181181            epilog = "Common %prog commands:\n"
    182             relevant_commands = filter(self._tool.should_show_in_main_help, self._tool.commands)
     182            relevant_commands = list(filter(self._tool.should_show_in_main_help, self._tool.commands))
    183183        longest_name_length = max(map(lambda command: len(command.name), relevant_commands))
    184         relevant_commands.sort(lambda a, b: cmp(a.name, b.name))
     184        relevant_commands = sorted(relevant_commands, key=lambda command: command.name)
    185185        command_help_texts = map(lambda command: "   %s   %s\n" % (command.name.ljust(longest_name_length), command.help_text), relevant_commands)
    186186        epilog += "%s\n" % "".join(command_help_texts)
     
    233233        commands = set()
    234234        cls._add_all_subclasses(Command, commands)
    235         return sorted(commands)
     235        return sorted(commands, key=lambda typ: typ.__name__)
    236236
    237237    def name(self):
  • trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver.py

    r225724 r253128  
    2424
    2525from __future__ import print_function
    26 import BaseHTTPServer
    27 import SocketServer
     26
    2827import logging
    2928import json
     
    3130import sys
    3231import urllib
     32
     33if sys.version_info > (3, 0):
     34    from http.server import HTTPServer
     35    from socketserver import ThreadingMixIn
     36else:
     37    from BaseHTTPServer import HTTPServer
     38    from SocketServer import ThreadingMixIn
    3339
    3440from webkitpy.common.memoized import memoized
     
    4046
    4147
    42 class GardeningHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
     48class GardeningHTTPServer(ThreadingMixIn, HTTPServer):
    4349    def __init__(self, httpd_port, config):
    4450        server_name = ''
  • trunk/Tools/Scripts/webkitpy/tool/servers/rebaselineserver.py

    r239989 r253128  
    3030import os
    3131import os.path
    32 import BaseHTTPServer
     32import sys
    3333
    3434from webkitpy.common.system.executive import ScriptError
    3535from webkitpy.port.base import Port
    3636from webkitpy.tool.servers.reflectionhandler import ReflectionHandler
     37
     38if sys.version_info > (3, 0):
     39    from http.server import HTTPServer
     40else:
     41    from BaseHTTPServer import HTTPServer
    3742
    3843
     
    170175
    171176        def baseline_search_path(self, **kwargs):
    172             return self._platforms_by_directory.keys()
     177            return list(self._platforms_by_directory.keys())
    173178
    174179        def platform_from_directory(self, directory):
     
    199204
    200205
    201 class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):
     206class RebaselineHTTPServer(HTTPServer):
    202207    def __init__(self, httpd_port, config):
    203208        server_name = ""
    204         BaseHTTPServer.HTTPServer.__init__(self, (server_name, httpd_port), RebaselineHTTPRequestHandler)
     209        HTTPServer.__init__(self, (server_name, httpd_port), RebaselineHTTPRequestHandler)
    205210        self.test_config = config['test_config']
    206211        self.results_json = config['results_json']
  • trunk/Tools/Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py

    r174136 r253128  
    235235            'fast/text-notactual.txt',
    236236        ))
    237         self.assertItemsEqual(
     237        self.assertEqual(
    238238            ('text-actual.txt',),
    239239            rebaselineserver._get_actual_result_files(
  • trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py

    r135936 r253128  
    2727# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828
    29 import BaseHTTPServer
    30 
    3129import cgi
    3230import codecs
     
    3735import os.path
    3836import shutil
     37import sys
    3938import threading
    4039import time
    41 import urlparse
    4240import wsgiref.handlers
    43 import BaseHTTPServer
     41
     42if sys.version_info > (3, 0):
     43    from http.server import BaseHTTPRequestHandler
     44
     45else:
     46    from BaseHTTPServer import BaseHTTPRequestHandler
    4447
    4548
    46 class ReflectionHandler(BaseHTTPServer.BaseHTTPRequestHandler):
     49class ReflectionHandler(BaseHTTPRequestHandler):
    4750    STATIC_FILE_EXTENSIONS = ['.js', '.css', '.html']
    4851    # Subclasses should override.
  • trunk/Tools/Scripts/webkitpy/tool/steps/applywatchlist.py

    r249067 r253128  
    6666        else:
    6767            _log.info('No bug was updated because no id was given.')
    68         _log.info('Result of watchlist: cc "{}" messages "{}"'.format(', '.join(cc_emails), comment_text))
     68        _log.info('Result of watchlist: cc "{}" messages "{}"'.format(', '.join(sorted(cc_emails)), comment_text))
  • trunk/Tools/Scripts/webkitpy/tool/steps/applywatchlist_unittest.py

    r249067 r253128  
    4343        }
    4444        expected_logs = """MockWatchList: determine_cc_and_messages
    45 MOCK bug comment: bug_id=50001, cc=set(['levin@chromium.org']), see_also=None
     45MOCK bug comment: bug_id=50001, cc=['levin@chromium.org'], see_also=None
    4646--- Begin comment ---
    4747Message2.
  • trunk/Tools/Scripts/webkitpy/tool/steps/confirmdiff.py

    r225733 r253128  
    2727# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828
    29 import urllib
     29import sys
    3030
    3131from webkitpy.tool.steps.abstractstep import AbstractStep
     
    3535from webkitpy.common.system.executive import ScriptError
    3636
     37if sys.version_info > (3, 0):
     38    from urllib.request import pathname2url
     39else:
     40    from urllib import pathname2url
    3741
    3842_log = logutils.get_logger(__file__)
     
    5458                                       self._tool.scm().checkout_root)
    5559            pretty_diff_file = pretty_patch.pretty_diff_file(diff)
    56             url = "file://%s" % urllib.pathname2url(pretty_diff_file.name)
     60            url = "file://%s" % pathname2url(pretty_diff_file.name)
    5761            self._tool.user.open_url(url)
    5862            # We return the pretty_diff_file here because we need to keep the
  • trunk/Tools/Scripts/webkitpy/tool/steps/haslanded.py

    r225733 r253128  
    2727# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828
    29 import cStringIO as StringIO
    3029import logging
    3130import sys
     
    3635from webkitpy.common.system.executive import Executive, ScriptError
    3736from webkitpy.common.checkout import diff_parser
     37from webkitpy.common.unicode_compatibility import StringIO
    3838
    3939from webkitpy.tool.steps import confirmdiff
     
    4646    @classmethod
    4747    def convert_to_svn(cls, diff):
    48         lines = StringIO.StringIO(diff).readlines()
     48        lines = StringIO(diff).readlines()
    4949        convert = diff_parser.get_diff_converter(lines)
    5050        return "".join(convert(x) for x in lines)
     
    5454        output = []
    5555        skipping = False
    56         for line in StringIO.StringIO(diff).readlines():
     56        for line in StringIO(diff).readlines():
    5757            indexline = re.match("^Index: ([^\\n]*/)?([^/\\n]*)$", line)
    5858            if skipping and indexline:
  • trunk/Tools/Scripts/webkitpy/tool/steps/preparechangelog.py

    r225733 r253128  
    6666        with self._tool.filesystem.open_text_file_for_reading(changelog_path) as changelog_file:
    6767            entries_gen = ChangeLog.parse_entries_from_file(changelog_file)
    68             entries = zip(entries_gen, range(2))
     68            entries = list(zip(entries_gen, range(2)))
    6969
    7070        if not len(entries):
  • trunk/Tools/Scripts/webkitpy/tool/steps/promptforbugortitle.py

    r246566 r253128  
    2727# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828
     29import re
     30import sys
     31
    2932from webkitpy.tool.steps.abstractstep import AbstractStep
    3033from webkitpy.tool.steps.options import Options
    31 from urlparse import urlparse
    32 import re
     34
     35if sys.version_info > (3, 0):
     36    from urllib.parse import urlparse
     37else:
     38    from urlparse import urlparse
     39
    3340
    3441class PromptForBugOrTitle(AbstractStep):
  • trunk/Tools/Scripts/webkitpy/tool/steps/steps_unittest.py

    r224547 r253128  
    189189        step = steps.Build(tool, mock_options)
    190190        expected_logs = """Building WebKit
    191 MOCK run_and_throw_if_fail: ['Tools/Scripts/build-jsc', '--debug', 'ARCHS=True'], cwd=/mock-checkout, env={'TERM': 'dumb', 'MOCK_ENVIRON_COPY': '1'}
     191MOCK run_and_throw_if_fail: ['Tools/Scripts/build-jsc', '--debug', 'ARCHS=True'], cwd=/mock-checkout, env={'MOCK_ENVIRON_COPY': '1', 'TERM': 'dumb'}
    192192"""
    193193        OutputCapture().assert_outputs(self, step.run, [{}], expected_logs=expected_logs)
     
    205205        step = steps.Build(tool, mock_options)
    206206        expected_logs = """Building WebKit
    207 MOCK run_and_throw_if_fail: ['Tools/Scripts/build-jsc', '--release', 'ARCHS=True'], cwd=/mock-checkout, env={'TERM': 'dumb', 'MOCK_ENVIRON_COPY': '1'}
     207MOCK run_and_throw_if_fail: ['Tools/Scripts/build-jsc', '--release', 'ARCHS=True'], cwd=/mock-checkout, env={'MOCK_ENVIRON_COPY': '1', 'TERM': 'dumb'}
    208208"""
    209209        OutputCapture().assert_outputs(self, step.run, [{}], expected_logs=expected_logs)
  • trunk/Tools/Scripts/webkitpy/w3c/test_exporter.py

    r245287 r253128  
    3030import time
    3131import json
    32 from urllib2 import HTTPError
     32import sys
    3333
    3434from webkitpy.common.checkout.scm.git import Git
     
    4040from webkitpy.w3c.common import WPT_GH_ORG, WPT_GH_REPO_NAME, WPT_GH_URL, WPTPaths
    4141from webkitpy.common.memoized import memoized
     42
     43if sys.version_info > (3, 0):
     44    from urllib.error import HTTPError
     45else:
     46    from urllib2 import HTTPError
    4247
    4348_log = logging.getLogger(__name__)
  • trunk/Tools/Scripts/webkitpy/w3c/wpt_github.py

    r226009 r253128  
    3131import logging
    3232import re
    33 import urllib2
     33import sys
    3434from collections import namedtuple
    3535
    3636from webkitpy.common.memoized import memoized
    3737from webkitpy.w3c.common import WPT_GH_ORG, WPT_GH_REPO_NAME, EXPORT_PR_LABEL
     38
     39if sys.version_info > (3, 0):
     40    from urllib.error import HTTPError
     41    from urllib.parse import quote
     42else:
     43    from urllib2 import HTTPError, quote
    3844
    3945_log = logging.getLogger(__name__)
     
    193199            WPT_GH_REPO_NAME,
    194200            number,
    195             urllib2.quote(label),
     201            quote(label),
    196202        )
    197203        response = self.request(path, method='DELETE')
     
    286292            else:
    287293                raise GitHubError(204, response.status_code, 'check if PR %d is merged' % pr_number)
    288         except urllib2.HTTPError as e:
     294        except HTTPError as e:
    289295            if e.code == 404:
    290296                return False
     
    311317        try:
    312318            response = self.request(path, method='PUT', body=body)
    313         except urllib2.HTTPError as e:
     319        except HTTPError as e:
    314320            if e.code == 405:
    315321                raise MergeError(pr_number)
     
    386392
    387393        Args:
    388             raw_response: a response object returned by open methods in urllib2.
     394            raw_response: a response object returned by open methods in urllib2/urllib.
    389395        """
    390396        self._raw_response = raw_response
Note: See TracChangeset for help on using the changeset viewer.