Title: [95500] trunk/Tools
Revision
95500
Author
[email protected]
Date
2011-09-19 17:56:48 -0700 (Mon, 19 Sep 2011)

Log Message

Sheriffbot rollout should be more intuitive.
https://bugs.webkit.org/show_bug.cgi?id=68415

Reviewed by Adam Barth.

* Scripts/webkitpy/tool/bot/irc_command.py: Add support for revert and comma separated args.
* Scripts/webkitpy/tool/bot/irc_command_unittest.py: Add parsing tests for comma separated args
  and a few others cases.
* Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Verify that revert works.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (95499 => 95500)


--- trunk/Tools/ChangeLog	2011-09-20 00:38:09 UTC (rev 95499)
+++ trunk/Tools/ChangeLog	2011-09-20 00:56:48 UTC (rev 95500)
@@ -1,5 +1,17 @@
 2011-09-19  David Levin  <[email protected]>
 
+        Sheriffbot rollout should be more intuitive.
+        https://bugs.webkit.org/show_bug.cgi?id=68415
+
+        Reviewed by Adam Barth.
+
+        * Scripts/webkitpy/tool/bot/irc_command.py: Add support for revert and comma separated args.
+        * Scripts/webkitpy/tool/bot/irc_command_unittest.py: Add parsing tests for comma separated args
+          and a few others cases.
+        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py: Verify that revert works.
+
+2011-09-19  David Levin  <[email protected]>
+
         check-webkit-style generates bogus warning for StructuredExceptionHandlerSupressor.h
         https://bugs.webkit.org/show_bug.cgi?id=68391
 

Modified: trunk/Tools/Scripts/webkitpy/tool/bot/irc_command.py (95499 => 95500)


--- trunk/Tools/Scripts/webkitpy/tool/bot/irc_command.py	2011-09-20 00:38:09 UTC (rev 95499)
+++ trunk/Tools/Scripts/webkitpy/tool/bot/irc_command.py	2011-09-20 00:56:48 UTC (rev 95500)
@@ -66,26 +66,42 @@
 
 
 class Rollout(IRCCommand):
+    def _extract_revisions(self, arg):
+
+        revision_list = []
+        possible_revisions = arg.split(",")
+        for revision in possible_revisions:
+            revision = revision.strip()
+            if not revision:
+                continue
+            revision = revision.lstrip("r")
+            # If one part of the arg isn't in the correct format,
+            # then none of the arg should be considered a revision.
+            if not revision.isdigit():
+                return None
+            revision_list.append(int(revision))
+        return revision_list
+
     def _parse_args(self, args):
         if not args:
             return (None, None)
 
-        # the first argument must be a revision number
-        first_revision = args[0].lstrip("r")
-        if not first_revision.isdigit():
+        svn_revision_list = []
+        remaining_args = args[:]
+        # First process all revisions.
+        while remaining_args:
+            new_revisions = self._extract_revisions(remaining_args[0])
+            if not new_revisions:
+                break
+            svn_revision_list += new_revisions
+            remaining_args = remaining_args[1:]
+
+        # Was there a revision number?
+        if not len(svn_revision_list):
             return (None, None)
 
-        parsing_revision = True
-        svn_revision_list = [int(first_revision)]
-        rollout_reason = []
-        for arg in args[1:]:
-            if arg.lstrip("r").isdigit() and parsing_revision:
-                svn_revision_list.append(int(arg.lstrip("r")))
-            else:
-                parsing_revision = False
-                rollout_reason.append(arg)
-
-        rollout_reason = " ".join(rollout_reason)
+        # Everything left is the reason.
+        rollout_reason = " ".join(remaining_args)
         return svn_revision_list, rollout_reason
 
     def _responsible_nicknames_from_revisions(self, tool, sheriff, svn_revision_list):
@@ -161,7 +177,7 @@
 
 class Help(IRCCommand):
     def execute(self, nick, args, tool, sheriff):
-        return "%s: Available commands: %s" % (nick, ", ".join(sorted(commands.keys())))
+        return "%s: Available commands: %s" % (nick, ", ".join(sorted(visible_commands.keys())))
 
 
 class Hi(IRCCommand):
@@ -235,7 +251,7 @@
 
 
 # FIXME: Lame.  We should have an auto-registering CommandCenter.
-commands = {
+visible_commands = {
     "help": Help,
     "hi": Hi,
     "last-green-revision": LastGreenRevision,
@@ -245,3 +261,10 @@
     "create-bug": CreateBug,
     "roll-chromium-deps": RollChromiumDEPS,
 }
+
+# Add revert as an "easter egg" command. Why?
+# revert is the same as rollout and it would be confusing to list both when
+# they do the same thing. However, this command is a very natural thing for
+# people to use and it seems silly to have them hunt around for "rollout" instead.
+commands = visible_commands.copy()
+commands["revert"] = Rollout

Modified: trunk/Tools/Scripts/webkitpy/tool/bot/irc_command_unittest.py (95499 => 95500)


--- trunk/Tools/Scripts/webkitpy/tool/bot/irc_command_unittest.py	2011-09-20 00:38:09 UTC (rev 95499)
+++ trunk/Tools/Scripts/webkitpy/tool/bot/irc_command_unittest.py	2011-09-20 00:56:48 UTC (rev 95500)
@@ -98,6 +98,18 @@
         self.assertEquals(([1234], "testing foo"),
                           rollout._parse_args(["1234", "testing", "foo"]))
 
+        self.assertEquals(([554], "testing foo"),
+                          rollout._parse_args(["r554", "testing", "foo"]))
+
+        self.assertEquals(([556, 792], "testing foo"),
+                          rollout._parse_args(["r556", "792", "testing", "foo"]))
+
+        self.assertEquals(([128, 256], "testing foo"),
+                          rollout._parse_args(["r128,r256", "testing", "foo"]))
+
+        self.assertEquals(([512, 1024, 2048], "testing foo"),
+                          rollout._parse_args(["512,", "1024,2048", "testing", "foo"]))
+
         # Test invalid argument parsing:
         self.assertEquals((None, None), rollout._parse_args([]))
         self.assertEquals((None, None), rollout._parse_args(["--bar", "1234"]))

Modified: trunk/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py (95499 => 95500)


--- trunk/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py	2011-09-20 00:38:09 UTC (rev 95499)
+++ trunk/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py	2011-09-20 00:56:48 UTC (rev 95500)
@@ -97,6 +97,10 @@
         expected_stderr = "MOCK: irc.post: mock_nick, abarth, darin, eseidel: Preparing rollout for http://trac.webkit.org/changeset/21654...\nMOCK: irc.post: mock_nick, abarth, darin, eseidel: Created rollout: http://example.com/36936\n"
         OutputCapture().assert_outputs(self, run, args=["rollout 21654 This patch broke the world"], expected_stderr=expected_stderr)
 
+    def test_revert(self):
+        expected_stderr = "MOCK: irc.post: mock_nick, abarth, darin, eseidel: Preparing rollout for http://trac.webkit.org/changeset/21654...\nMOCK: irc.post: mock_nick, abarth, darin, eseidel: Created rollout: http://example.com/36936\n"
+        OutputCapture().assert_outputs(self, run, args=["revert 21654 This patch broke the world"], expected_stderr=expected_stderr)
+
     def test_roll_chromium_deps(self):
         expected_stderr = "MOCK: irc.post: mock_nick: Rolling Chromium DEPS to r21654\nMOCK: irc.post: mock_nick: Created DEPS roll: http://example.com/36936\n"
         OutputCapture().assert_outputs(self, run, args=["roll-chromium-deps 21654"], expected_stderr=expected_stderr)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to