Title: [159052] trunk/Tools
Revision
159052
Author
[email protected]
Date
2013-11-11 09:37:06 -0800 (Mon, 11 Nov 2013)

Log Message

The feeder queue will not feed patches older than one week.
https://bugs.webkit.org/show_bug.cgi?id=107152

Patch by Tamas Gergely <[email protected]> on 2013-11-11
Reviewed by Csaba Osztrogonác.

The feeder queue will not feed patches older than one week.
Unit test added to this scenario.

* Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
(BugzillaQueries._parse_attachment_ids_request_query):
  Handle date parameter.
(BugzillaQueries):
(BugzillaQueries._fetch_attachment_ids_request_query):
  Propagate date.
(BugzillaQueries.fetch_attachment_ids_from_review_queue):
  Propagate date.
* Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
(MockBugzillaQueries.fetch_attachment_ids_from_review_queue):
  Handle date.
* Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
(test_request_page_parsing):
  Unit test added.
* Scripts/webkitpy/tool/bot/feeders.py:
(EWSFeeder.feed):
  Query patch ids with date parameter (now - 1 week).

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (159051 => 159052)


--- trunk/Tools/ChangeLog	2013-11-11 17:33:19 UTC (rev 159051)
+++ trunk/Tools/ChangeLog	2013-11-11 17:37:06 UTC (rev 159052)
@@ -1,5 +1,33 @@
 2013-11-11  Tamas Gergely  <[email protected]>
 
+        The feeder queue will not feed patches older than one week.
+        https://bugs.webkit.org/show_bug.cgi?id=107152
+
+        Reviewed by Csaba Osztrogonác.
+
+        The feeder queue will not feed patches older than one week.
+        Unit test added to this scenario.
+
+        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
+        (BugzillaQueries._parse_attachment_ids_request_query):
+          Handle date parameter.
+        (BugzillaQueries):
+        (BugzillaQueries._fetch_attachment_ids_request_query):
+          Propagate date.
+        (BugzillaQueries.fetch_attachment_ids_from_review_queue):
+          Propagate date.
+        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
+        (MockBugzillaQueries.fetch_attachment_ids_from_review_queue):
+          Handle date.
+        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
+        (test_request_page_parsing):
+          Unit test added.
+        * Scripts/webkitpy/tool/bot/feeders.py:
+        (EWSFeeder.feed):
+          Query patch ids with date parameter (now - 1 week).
+
+2013-11-11  Tamas Gergely  <[email protected]>
+
         Do not shut down ImageDiff server after every diff during the tests.
         https://bugs.webkit.org/show_bug.cgi?id=124140
 

Modified: trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py (159051 => 159052)


--- trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py	2013-11-11 17:33:19 UTC (rev 159051)
+++ trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py	2013-11-11 17:37:06 UTC (rev 159052)
@@ -1,6 +1,7 @@
 # Copyright (c) 2011 Google Inc. All rights reserved.
 # Copyright (c) 2009 Apple Inc. All rights reserved.
 # Copyright (c) 2010 Research In Motion Limited. All rights reserved.
+# Copyright (c) 2013 University of Szeged. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are
@@ -180,16 +181,37 @@
         return [int(bug_link_cell.find("a").string)
                 for bug_link_cell in soup('td', "first-child")]
 
-    def _parse_attachment_ids_request_query(self, page):
+    def _parse_attachment_ids_request_query(self, page, since=None):
+        # Formats
         digits = re.compile("\d+")
         attachment_href = re.compile("attachment.cgi\?id=\d+&action=""
-        attachment_links = SoupStrainer("a", href=""
-        return [int(digits.search(tag["href"]).group(0))
+        # if no date is given, return all ids
+        if not since:
+            attachment_links = SoupStrainer("a", href=""
+            return [int(digits.search(tag["href"]).group(0))
                 for tag in BeautifulSoup(page, parseOnlyThese=attachment_links)]
 
-    def _fetch_attachment_ids_request_query(self, query):
-        return self._parse_attachment_ids_request_query(self._load_query(query))
+        # Parse the main table only
+        date_format = re.compile("\d{4}-\d{2}-\d{2} \d{2}:\d{2}")
+        mtab = SoupStrainer("table", {"class": "requests"})
+        soup = BeautifulSoup(page, parseOnlyThese=mtab)
+        patch_ids = []
 
+        for row in soup.findAll("tr"):
+            patch_tag = row.find("a", {"href": attachment_href})
+            if not patch_tag:
+                continue
+            patch_id = int(digits.search(patch_tag["href"]).group(0))
+            date_tag = row.find("td", text=date_format)
+            if date_tag and datetime.strptime(date_format.search(date_tag).group(0), "%Y-%m-%d %H:%M") < since:
+                _log.info("Patch is old: %d (%s)" % (patch_id, date_tag))
+                continue
+            patch_ids.append(patch_id)
+        return patch_ids
+
+    def _fetch_attachment_ids_request_query(self, query, since=None):
+        return self._parse_attachment_ids_request_query(self._load_query(query), since)
+
     def _parse_quips(self, page):
         soup = BeautifulSoup(page, convertEntities=BeautifulSoup.HTML_ENTITIES)
         quips = soup.find(text=re.compile(r"Existing quips:")).findNext("ul").findAll("li")
@@ -252,9 +274,9 @@
 
     # NOTE: This is the only client of _fetch_attachment_ids_request_query
     # This method only makes one request to bugzilla.
-    def fetch_attachment_ids_from_review_queue(self):
+    def fetch_attachment_ids_from_review_queue(self, since=None):
         review_queue_url = "request.cgi?action=""
-        return self._fetch_attachment_ids_request_query(review_queue_url)
+        return self._fetch_attachment_ids_request_query(review_queue_url, since)
 
     # This only works if your account has edituser privileges.
     # We could easily parse https://bugs.webkit.org/userprefs.cgi?tab=permissions to

Modified: trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py (159051 => 159052)


--- trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py	2013-11-11 17:33:19 UTC (rev 159051)
+++ trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py	2013-11-11 17:37:06 UTC (rev 159052)
@@ -251,9 +251,12 @@
                 self._all_bugs())
         return map(lambda bug: bug.id(), bugs_with_commit_queued_patches)
 
-    def fetch_attachment_ids_from_review_queue(self):
+    def fetch_attachment_ids_from_review_queue(self, since=None):
         unreviewed_patches = sum([bug.unreviewed_patches()
                                   for bug in self._all_bugs()], [])
+        if since:
+            unreviewed_pacthes = [patch for patch in unreviewed_patches
+                                        if patch.attach_date() >= since]
         return map(lambda patch: patch.id(), unreviewed_patches)
 
     def fetch_patches_from_commit_queue(self):

Modified: trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py (159051 => 159052)


--- trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py	2013-11-11 17:33:19 UTC (rev 159051)
+++ trunk/Tools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py	2013-11-11 17:37:06 UTC (rev 159052)
@@ -429,6 +429,7 @@
     def test_request_page_parsing(self):
         queries = BugzillaQueries(None)
         self.assertEqual([40511, 40722, 40723], queries._parse_attachment_ids_request_query(self._sample_request_page))
+        self.assertEqual([40722, 40723], queries._parse_attachment_ids_request_query(self._sample_request_page, datetime.datetime(2009, 10, 4, 11, 38, 44)))
 
     def test_quip_page_parsing(self):
         queries = BugzillaQueries(None)

Modified: trunk/Tools/Scripts/webkitpy/tool/bot/feeders.py (159051 => 159052)


--- trunk/Tools/Scripts/webkitpy/tool/bot/feeders.py	2013-11-11 17:33:19 UTC (rev 159051)
+++ trunk/Tools/Scripts/webkitpy/tool/bot/feeders.py	2013-11-11 17:37:06 UTC (rev 159052)
@@ -26,6 +26,7 @@
 # (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 datetime import datetime, timedelta
 import logging
 
 from webkitpy.common.config.committervalidator import CommitterValidator
@@ -90,7 +91,7 @@
         AbstractFeeder.__init__(self, tool)
 
     def feed(self):
-        ids_needing_review = set(self._tool.bugs.queries.fetch_attachment_ids_from_review_queue())
+        ids_needing_review = set(self._tool.bugs.queries.fetch_attachment_ids_from_review_queue(datetime.today() - timedelta(7)))
         new_ids = ids_needing_review.difference(self._ids_sent_to_server)
         _log.info("Feeding EWS (%s, %s new)" % (pluralize("r? patch", len(ids_needing_review)), len(new_ids)))
         for attachment_id in new_ids:  # Order doesn't really matter for the EWS.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to