Title: [148498] trunk/Tools
Revision
148498
Author
[email protected]
Date
2013-04-16 00:43:56 -0700 (Tue, 16 Apr 2013)

Log Message

Isolate Early Warning System definitions into a JSON
https://bugs.webkit.org/show_bug.cgi?id=114558

Reviewed by Benjamin Poulain.

Added ews.json to common/config, and made tool/commands/__init__.py call
AbstractEarlyWarningSystem.load_ews_classes to instantiate classes based on ews.json.

* Scripts/webkitpy/common/config/ews.json: Extracted from earlywarningsystem.py.
* Scripts/webkitpy/tool/commands/__init__.py:
* Scripts/webkitpy/tool/commands/earlywarningsystem.py:
(AbstractEarlyWarningSystem):
(AbstractEarlyWarningSystem.__init__):
(AbstractEarlyWarningSystem.load_ews_classes): Added. Loads ews.json.
* Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
(EarlyWarningSystemTest._default_expected_logs):
(_test_ews):
(test_ewses):

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (148497 => 148498)


--- trunk/Tools/ChangeLog	2013-04-16 07:36:29 UTC (rev 148497)
+++ trunk/Tools/ChangeLog	2013-04-16 07:43:56 UTC (rev 148498)
@@ -1,3 +1,24 @@
+2013-04-13  Ryosuke Niwa  <[email protected]>
+
+        Isolate Early Warning System definitions into a JSON
+        https://bugs.webkit.org/show_bug.cgi?id=114558
+
+        Reviewed by Benjamin Poulain.
+
+        Added ews.json to common/config, and made tool/commands/__init__.py call
+        AbstractEarlyWarningSystem.load_ews_classes to instantiate classes based on ews.json.
+
+        * Scripts/webkitpy/common/config/ews.json: Extracted from earlywarningsystem.py.
+        * Scripts/webkitpy/tool/commands/__init__.py:
+        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
+        (AbstractEarlyWarningSystem):
+        (AbstractEarlyWarningSystem.__init__):
+        (AbstractEarlyWarningSystem.load_ews_classes): Added. Loads ews.json.
+        * Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py:
+        (EarlyWarningSystemTest._default_expected_logs):
+        (_test_ews):
+        (test_ewses):
+
 2013-04-15  Ryosuke Niwa  <[email protected]>
 
         WKR gets stuck when there are many merges

Added: trunk/Tools/Scripts/webkitpy/common/config/ews.json (0 => 148498)


--- trunk/Tools/Scripts/webkitpy/common/config/ews.json	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/common/config/ews.json	2013-04-16 07:43:56 UTC (rev 148498)
@@ -0,0 +1,53 @@
+{
+    "GTK EWS": {
+        "port": "gtk",
+        "watchers": [
+            "[email protected]"
+        ]
+    },
+    "GTK WK2 EWS": {
+        "port": "gtk-wk2",
+        "watchers": [
+            "[email protected]"
+        ]
+    },
+    "EFL EWS": {
+        "port": "efl",
+        "watchers": [
+            "[email protected]",
+            "[email protected]",
+            "[email protected]",
+            "[email protected]"
+        ]
+    },
+    "Qt EWS": {
+        "port": "qt",
+        "watchers": [
+            "[email protected]"
+        ]
+    },
+    "Qt WK2 EWS": {
+        "port": "qt",
+        "watchers": [
+            "[email protected]"
+        ]
+    },
+    "Win EWS": {
+        "port": "win",
+        "runTests": true
+    },
+    "Mac EWS": {
+        "port": "mac",
+        "watchers": [
+            "[email protected]"
+        ],
+        "runTests": true
+    },
+    "Mac WK2 EWS": {
+        "port": "mac-wk2",
+        "watchers": [
+            "[email protected]"
+        ],
+        "runTests": true
+    }
+}
\ No newline at end of file

Modified: trunk/Tools/Scripts/webkitpy/tool/commands/__init__.py (148497 => 148498)


--- trunk/Tools/Scripts/webkitpy/tool/commands/__init__.py	2013-04-16 07:36:29 UTC (rev 148497)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/__init__.py	2013-04-16 07:43:56 UTC (rev 148498)
@@ -7,7 +7,7 @@
 from webkitpy.tool.commands.bugsearch import BugSearch
 from webkitpy.tool.commands.chromechannels import ChromeChannels
 from webkitpy.tool.commands.download import *
-from webkitpy.tool.commands.earlywarningsystem import *
+from webkitpy.tool.commands.earlywarningsystem import AbstractEarlyWarningSystem
 from webkitpy.tool.commands.findusers import FindUsers
 from webkitpy.tool.commands.gardenomatic import GardenOMatic
 from webkitpy.tool.commands.newcommitbot import NewCommitBot
@@ -21,3 +21,5 @@
 from webkitpy.tool.commands.sheriffbot import *
 from webkitpy.tool.commands.upload import *
 from webkitpy.tool.commands.suggestnominations import *
+
+AbstractEarlyWarningSystem.load_ews_classes()

Modified: trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem.py (148497 => 148498)


--- trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem.py	2013-04-16 07:36:29 UTC (rev 148497)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem.py	2013-04-16 07:43:56 UTC (rev 148498)
@@ -26,11 +26,13 @@
 # (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 json
 import logging
 from optparse import make_option
 
 from webkitpy.common.config.committers import CommitterList
 from webkitpy.common.config.ports import DeprecatedPort
+from webkitpy.common.system.filesystem import FileSystem
 from webkitpy.common.system.executive import ScriptError
 from webkitpy.tool.bot.earlywarningsystemtask import EarlyWarningSystemTask, EarlyWarningSystemTaskDelegate
 from webkitpy.tool.bot.expectedfailures import ExpectedFailures
@@ -45,10 +47,10 @@
 class AbstractEarlyWarningSystem(AbstractReviewQueue, EarlyWarningSystemTaskDelegate):
     _build_style = "release"
     # FIXME: Switch _default_run_tests from opt-in to opt-out once more bots are ready to run tests.
-    _default_run_tests = False
+    run_tests = False
 
     def __init__(self):
-        options = [make_option("--run-tests", action="" dest="run_tests", default=self._default_run_tests, help="Run the Layout tests for each patch")]
+        options = [make_option("--run-tests", action="" dest="run_tests", default=self.run_tests, help="Run the Layout tests for each patch")]
         AbstractReviewQueue.__init__(self, options=options)
 
     def begin_work_queue(self):
@@ -135,68 +137,21 @@
         # FIXME: Why does this not exit(1) like the superclass does?
         _log.error(script_error.message_with_output())
 
+    @classmethod
+    def load_ews_classes(cls):
+        filesystem = FileSystem()
+        json_path = filesystem.join(filesystem.dirname(filesystem.path_to_module('webkitpy.common.config')), 'ews.json')
+        try:
+            ewses = json.loads(filesystem.read_text_file(json_path))
+        except ValueError:
+            return
 
-class GtkEWS(AbstractEarlyWarningSystem):
-    name = "gtk-ews"
-    port_name = "gtk"
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
-
-
-class GtkWK2EWS(AbstractEarlyWarningSystem):
-    name = "gtk-wk2-ews"
-    port_name = "gtk-wk2"
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
-
-
-class EflEWS(AbstractEarlyWarningSystem):
-    name = "efl-ews"
-    port_name = "efl"
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-        "[email protected]",
-        "[email protected]",
-        "[email protected]",
-    ]
-
-
-class QtEWS(AbstractEarlyWarningSystem):
-    name = "qt-ews"
-    port_name = "qt"
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
-
-
-class QtWK2EWS(AbstractEarlyWarningSystem):
-    name = "qt-wk2-ews"
-    port_name = "qt"
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
-
-
-class WinEWS(AbstractEarlyWarningSystem):
-    name = "win-ews"
-    port_name = "win"
-    _default_run_tests = True
-
-class MacEWS(AbstractEarlyWarningSystem):
-    name = "mac-ews"
-    port_name = "mac"
-    _default_run_tests = True
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
-
-
-class MacWK2EWS(AbstractEarlyWarningSystem):
-    name = "mac-wk2-ews"
-    port_name = "mac-wk2"
-    _default_run_tests = True
-    watchers = AbstractEarlyWarningSystem.watchers + [
-        "[email protected]",
-    ]
+        classes = []
+        for name, config in ewses.iteritems():
+            classes.append(type(str(name.replace(' ', '')), (AbstractEarlyWarningSystem,), {
+                'name': config['port'] + '-ews',
+                'port_name': config['port'],
+                'watchers': config.get('watchers', []),
+                'run_tests': config.get('runTests', cls.run_tests),
+            }))
+        return classes

Modified: trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py (148497 => 148498)


--- trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py	2013-04-16 07:36:29 UTC (rev 148497)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/earlywarningsystem_unittest.py	2013-04-16 07:43:56 UTC (rev 148498)
@@ -56,7 +56,7 @@
             "name": ews.name,
             "port": ews.port_name,
         }
-        if ews._default_run_tests:
+        if ews.run_tests:
             run_tests_line = "Running: webkit-patch --status-host=example.com build-and-test --no-clean --no-update --test --non-interactive --port=%(port)s\n" % string_replacements
         else:
             run_tests_line = ""
@@ -80,13 +80,12 @@
         ews.bind_to_tool(MockTool())
         options = Mock()
         options.port = None
-        options.run_tests = ews._default_run_tests
+        options.run_tests = ews.run_tests
         self.assert_queue_outputs(ews, expected_logs=self._default_expected_logs(ews), options=options)
 
     def test_ewses(self):
-        self._test_ews(MacEWS())
-        self._test_ews(MacWK2EWS())
-        self._test_ews(QtEWS())
-        self._test_ews(QtWK2EWS())
-        self._test_ews(GtkEWS())
-        self._test_ews(EflEWS())
+        classes = AbstractEarlyWarningSystem.load_ews_classes()
+        self.assertTrue(classes)
+        self.maxDiff = None
+        for ews_class in classes:
+            self._test_ews(ews_class())
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to