Changeset 70117 in webkit


Ignore:
Timestamp:
Oct 19, 2010 6:26:21 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-10-19 Eric Seidel <eric@webkit.org>

Reviewed by Adam Barth.

Teach feeder-queue how to feed the EWS bots
https://bugs.webkit.org/show_bug.cgi?id=47943

queues.webkit.org already knew how to accept EWS submissions
via /submit-to-ews. This teaches the feeder queue how to post
to that page with any new r? patches it sees.

  • QueueStatusServer/model/activeworkitems_unitest.py: Added.
    • More unit testing is always a good thing.
  • Scripts/webkitpy/common/net/bugzilla.py:
  • Scripts/webkitpy/common/net/statusserver.py:
  • Scripts/webkitpy/tool/bot/feeders.py:
  • Scripts/webkitpy/tool/commands/queues.py:
  • Scripts/webkitpy/tool/commands/queues_unittest.py:
  • Scripts/webkitpy/tool/mocktool.py:
Location:
trunk/WebKitTools
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKitTools/ChangeLog

    r70103 r70117  
     12010-10-19  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Teach feeder-queue how to feed the EWS bots
     6        https://bugs.webkit.org/show_bug.cgi?id=47943
     7
     8        queues.webkit.org already knew how to accept EWS submissions
     9        via /submit-to-ews.  This teaches the feeder queue how to post
     10        to that page with any new r? patches it sees.
     11
     12        * QueueStatusServer/model/activeworkitems_unitest.py: Added.
     13         - More unit testing is always a good thing.
     14        * Scripts/webkitpy/common/net/bugzilla.py:
     15        * Scripts/webkitpy/common/net/statusserver.py:
     16        * Scripts/webkitpy/tool/bot/feeders.py:
     17        * Scripts/webkitpy/tool/commands/queues.py:
     18        * Scripts/webkitpy/tool/commands/queues_unittest.py:
     19        * Scripts/webkitpy/tool/mocktool.py:
     20
    1212010-10-19  Eric Seidel  <eric@webkit.org>
    222
  • trunk/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py

    r68496 r70117  
    302302        return self._fetch_bug_ids_advanced_query(review_queue_url)
    303303
     304    # This method will make several requests to bugzilla.
    304305    def fetch_patches_from_review_queue(self, limit=None):
    305306        # [:None] returns the whole array.
     
    307308            for bug_id in self._fetch_bug_ids_from_review_queue()[:limit]], [])
    308309
    309     # FIXME: Why do we have both fetch_patches_from_review_queue and
    310     # fetch_attachment_ids_from_review_queue??
    311     # NOTE: This is also the only client of _fetch_attachment_ids_request_query
    312 
     310    # NOTE: This is the only client of _fetch_attachment_ids_request_query
     311    # This method only makes one request to bugzilla.
    313312    def fetch_attachment_ids_from_review_queue(self):
    314313        review_queue_url = "request.cgi?action=queue&type=review&group=type"
  • trunk/WebKitTools/Scripts/webkitpy/common/net/statusserver.py

    r70096 r70117  
    103103        return self._browser.submit().read()
    104104
     105    def _post_work_item_to_ews(self, attachment_id):
     106        submit_to_ews_url = "%s/submit-to-ews" % self.url
     107        self._browser.open(submit_to_ews_url)
     108        self._browser.select_form(name="submit_to_ews")
     109        self._browser["attachment_id"] = unicode(attachment_id)
     110        self._browser.submit()
     111
     112    def submit_to_ews(self, attachment_id):
     113        _log.info("Submitting attachment %s to EWS queues" % attachment_id)
     114        return NetworkTransaction().run(lambda: self._post_work_item_to_ews(attachment_id))
     115
    105116    def next_work_item(self, queue_name):
    106117        _log.debug("Fetching next work item for %s" % queue_name)
  • trunk/WebKitTools/Scripts/webkitpy/tool/bot/feeders.py

    r67913 r70117  
    2929from webkitpy.common.system.deprecated_logging import log
    3030from webkitpy.common.net.bugzilla import CommitterValidator
     31from webkitpy.tool.grammar import pluralize
    3132
    3233
     
    3536        self._tool = tool
    3637
    37     def feed(tool):
    38         raise NotImplementedError, "subclasses must implement"
    39 
    40     def update_work_items(self, item_ids):
    41         self._tool.status_server.update_work_items(self.queue_name, item_ids)
    42         log("Feeding %s items %s" % (self.queue_name, item_ids))
     38    def feed(self):
     39        raise NotImplementedError("subclasses must implement")
    4340
    4441
     
    5047        self.committer_validator = CommitterValidator(self._tool.bugs)
    5148
     49    def _update_work_items(self, item_ids):
     50        self._tool.status_server.update_work_items(self.queue_name, item_ids)
     51        log("Feeding %s items %s" % (self.queue_name, item_ids))
     52
    5253    def feed(self):
    5354        patches = self._validate_patches()
    5455        patches = sorted(patches, self._patch_cmp)
    5556        patch_ids = [patch.id() for patch in patches]
    56         self.update_work_items(patch_ids)
     57        self._update_work_items(patch_ids)
    5758
    5859    def _patches_for_bug(self, bug_id):
     
    7273            return rollout_cmp
    7374        return cmp(a.attach_date(), b.attach_date())
     75
     76
     77class EWSFeeder(AbstractFeeder):
     78    def __init__(self, tool):
     79        self._ids_sent_to_server = set()
     80        AbstractFeeder.__init__(self, tool)
     81
     82    def feed(self):
     83        ids_needing_review = set(self._tool.bugs.queries.fetch_attachment_ids_from_review_queue())
     84        new_ids = ids_needing_review.difference(self._ids_sent_to_server)
     85        log("Feeding EWS (%s, %s new)" % (pluralize("r? patch", len(ids_needing_review)), len(new_ids)))
     86        for attachment_id in new_ids:  # Order doesn't really matter for the EWS.
     87            self._tool.status_server.submit_to_ews(attachment_id)
     88            self._ids_sent_to_server.add(attachment_id)
  • trunk/WebKitTools/Scripts/webkitpy/tool/commands/queues.py

    r70088 r70117  
    4646from webkitpy.tool.commands.stepsequence import StepSequenceErrorHandler
    4747from webkitpy.tool.bot.commitqueuetask import CommitQueueTask, CommitQueueTaskDelegate
    48 from webkitpy.tool.bot.feeders import CommitQueueFeeder
     48from webkitpy.tool.bot.feeders import CommitQueueFeeder, EWSFeeder
    4949from webkitpy.tool.bot.patchcollection import PersistentPatchCollection, PersistentPatchCollectionDelegate
    5050from webkitpy.tool.bot.queueengine import QueueEngine, QueueEngineDelegate
     
    168168        self.feeders = [
    169169            CommitQueueFeeder(self._tool),
     170            EWSFeeder(self._tool),
    170171        ]
    171172
     
    373374
    374375class AbstractReviewQueue(AbstractPatchQueue, PersistentPatchCollectionDelegate, StepSequenceErrorHandler):
     376    """This is the base-class for the EWS queues and the style-queue."""
    375377    def __init__(self, options=None):
    376378        AbstractPatchQueue.__init__(self, options)
  • trunk/WebKitTools/Scripts/webkitpy/tool/commands/queues_unittest.py

    r70088 r70117  
    136136MOCK: update_work_items: commit-queue [106, 197]
    137137Feeding commit-queue items [106, 197]
     138Feeding EWS (1 r? patch, 1 new)
     139MOCK: submit_to_ews: 103
    138140""",
    139141            "handle_unexpected_error": "Mock error message\n",
  • trunk/WebKitTools/Scripts/webkitpy/tool/mocktool.py

    r70088 r70117  
    555555        log("MOCK: update_work_items: %s %s" % (queue_name, work_items))
    556556
     557    def submit_to_ews(self, patch_id):
     558        log("MOCK: submit_to_ews: %s" % (patch_id))
     559
    557560    def update_status(self, queue_name, status, patch=None, results_file=None):
    558561        log("MOCK: update_status: %s %s" % (queue_name, status))
Note: See TracChangeset for help on using the changeset viewer.