[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

ossy at webkit.org ossy at webkit.org
Fri Jan 21 14:57:25 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 5178e31a6a12fb513010450dcb98d0a9294b6460
Author: ossy at webkit.org <ossy at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 5 13:25:53 2011 +0000

    sheriff-bot should be able to do multi-revision rollouts
    https://bugs.webkit.org/show_bug.cgi?id=51176
    
    Patch by Gabor Rapcsanyi <rgabor at inf.u-szeged.hu> on 2011-01-05
    Reviewed by Adam Barth.
    
    * Scripts/webkitpy/tool/bot/irc_command.py:
    * Scripts/webkitpy/tool/bot/sheriff.py:
    * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75062 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 0f8ec3a..0981a9d 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,14 @@
+2011-01-05  Gabor Rapcsanyi  <rgabor at inf.u-szeged.hu>
+
+        Reviewed by Adam Barth.
+
+        sheriff-bot should be able to do multi-revision rollouts
+        https://bugs.webkit.org/show_bug.cgi?id=51176
+
+        * Scripts/webkitpy/tool/bot/irc_command.py:
+        * Scripts/webkitpy/tool/bot/sheriff.py:
+        * Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py:
+
 2011-01-05  Eric Seidel  <eric at webkit.org>
 
         Reviewed by Adam Barth.
diff --git a/Tools/Scripts/webkitpy/tool/bot/irc_command.py b/Tools/Scripts/webkitpy/tool/bot/irc_command.py
index 0c17c9f..265974e 100644
--- a/Tools/Scripts/webkitpy/tool/bot/irc_command.py
+++ b/Tools/Scripts/webkitpy/tool/bot/irc_command.py
@@ -30,9 +30,10 @@ import random
 import webkitpy.common.config.irc as config_irc
 
 from webkitpy.common.config import urls
-from webkitpy.tool.bot.queueengine import TerminateQueue
 from webkitpy.common.net.bugzilla import parse_bug_id
 from webkitpy.common.system.executive import ScriptError
+from webkitpy.tool.bot.queueengine import TerminateQueue
+from webkitpy.tool.grammar import join_with_separators
 
 # FIXME: Merge with Command?
 class IRCCommand(object):
@@ -53,17 +54,38 @@ class Restart(IRCCommand):
 
 
 class Rollout(IRCCommand):
+    def _parse_args(self, args):
+        read_revision = True
+        rollout_reason = []
+        # the first argument must be a revision number
+        svn_revision_list = [args[0].lstrip("r")]
+        if not svn_revision_list[0].isdigit():
+            read_revision = False
+
+        for arg in args[1:]:
+            if arg.lstrip("r").isdigit() and read_revision:
+                svn_revision_list.append(arg.lstrip("r"))
+            else:
+                read_revision = False
+                rollout_reason.append(arg)
+
+        return svn_revision_list, rollout_reason
+
     def execute(self, nick, args, tool, sheriff):
-        if len(args) < 2:
-            tool.irc().post("%s: Usage: SVN_REVISION REASON" % nick)
+        svn_revision_list, rollout_reason = self._parse_args(args)
+
+        if (len(svn_revision_list) == 0) or (len(rollout_reason) == 0):
+            tool.irc().post("%s: Usage: SVN_REVISION [SVN_REVISIONS] REASON" % nick)
             return
-        svn_revision = args[0].lstrip("r")
-        rollout_reason = " ".join(args[1:])
-        tool.irc().post("Preparing rollout for r%s..." % svn_revision)
+
+        rollout_reason = " ".join(rollout_reason)
+
+        tool.irc().post("Preparing rollout for %s..." %
+                        join_with_separators(["r" + str(revision) for revision in svn_revision_list]))
         try:
             complete_reason = "%s (Requested by %s on %s)." % (
                 rollout_reason, nick, config_irc.channel)
-            bug_id = sheriff.post_rollout_patch(svn_revision, complete_reason)
+            bug_id = sheriff.post_rollout_patch(svn_revision_list, complete_reason)
             bug_url = tool.bugs.bug_url_for_bug_id(bug_id)
             tool.irc().post("%s: Created rollout: %s" % (nick, bug_url))
         except ScriptError, e:
diff --git a/Tools/Scripts/webkitpy/tool/bot/sheriff.py b/Tools/Scripts/webkitpy/tool/bot/sheriff.py
index 43f3221..e79713d 100644
--- a/Tools/Scripts/webkitpy/tool/bot/sheriff.py
+++ b/Tools/Scripts/webkitpy/tool/bot/sheriff.py
@@ -51,14 +51,15 @@ class Sheriff(object):
 
         self._tool.irc().post(irc_message)
 
-    def post_rollout_patch(self, svn_revision, rollout_reason):
-        # Ensure that svn_revision is a number (and not an option to
+    def post_rollout_patch(self, svn_revision_list, rollout_reason):
+        # Ensure that svn revisions are numbers (and not options to
         # create-rollout).
         try:
-            svn_revision = int(svn_revision)
+            svn_revisions = " ".join([str(int(revision)) for revision in svn_revision_list])
         except:
             raise ScriptError(message="Invalid svn revision number \"%s\"."
-                              % svn_revision)
+                              % " ".join(svn_revision_list))
+        svn_revisions = "'%s'" % svn_revisions
 
         if rollout_reason.startswith("-"):
             raise ScriptError(message="The rollout reason may not begin "
@@ -72,7 +73,7 @@ class Sheriff(object):
             # pass it prophylactically because we reject unrecognized command
             # line switches.
             "--parent-command=sheriff-bot",
-            svn_revision,
+            svn_revisions,
             rollout_reason,
         ])
         return parse_bug_id(output)
diff --git a/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py b/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py
index 08023bd..ccb8ac2 100644
--- a/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py
+++ b/Tools/Scripts/webkitpy/tool/bot/sheriffircbot_unittest.py
@@ -62,12 +62,20 @@ class SheriffIRCBotTest(unittest.TestCase):
         expected_stderr = "MOCK: irc.post: Preparing rollout for r21654...\nMOCK: irc.post: mock_nick: 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_multi_rollout(self):
+        expected_stderr = "MOCK: irc.post: Preparing rollout for r21654, r21655, and r21656...\nMOCK: irc.post: mock_nick: Created rollout: http://example.com/36936\n"
+        OutputCapture().assert_outputs(self, run, args=["rollout 21654 21655 21656 This 21654 patch broke the world"], expected_stderr=expected_stderr)
+
     def test_rollout_with_r_in_svn_revision(self):
         expected_stderr = "MOCK: irc.post: Preparing rollout for r21654...\nMOCK: irc.post: mock_nick: Created rollout: http://example.com/36936\n"
         OutputCapture().assert_outputs(self, run, args=["rollout r21654 This patch broke the world"], expected_stderr=expected_stderr)
 
+    def test_multi_rollout_with_r_in_svn_revision(self):
+        expected_stderr = "MOCK: irc.post: Preparing rollout for r21654, r21655, and r21656...\nMOCK: irc.post: mock_nick: Created rollout: http://example.com/36936\n"
+        OutputCapture().assert_outputs(self, run, args=["rollout r21654 21655 r21656 This r21654 patch broke the world"], expected_stderr=expected_stderr)
+
     def test_rollout_bananas(self):
-        expected_stderr = "MOCK: irc.post: mock_nick: Usage: SVN_REVISION REASON\n"
+        expected_stderr = "MOCK: irc.post: mock_nick: Usage: SVN_REVISION [SVN_REVISIONS] REASON\n"
         OutputCapture().assert_outputs(self, run, args=["rollout bananas"], expected_stderr=expected_stderr)
 
     def test_rollout_invalidate_revision(self):
@@ -90,6 +98,21 @@ class SheriffIRCBotTest(unittest.TestCase):
                                              "21654 -bad"],
                                        expected_stderr=expected_stderr)
 
+    def test_multi_rollout_invalidate_reason(self):
+        expected_stderr = ("MOCK: irc.post: Preparing rollout for "
+                           "r21654, r21655, and r21656...\nMOCK: irc.post: mock_nick: Failed to "
+                           "create rollout patch:\nMOCK: irc.post: The rollout"
+                           " reason may not begin with - (\"-bad (Requested "
+                           "by mock_nick on #webkit).\").\n")
+        OutputCapture().assert_outputs(self, run,
+                                       args=["rollout "
+                                             "21654 21655 r21656 -bad"],
+                                       expected_stderr=expected_stderr)
+
     def test_rollout_no_reason(self):
-        expected_stderr = "MOCK: irc.post: mock_nick: Usage: SVN_REVISION REASON\n"
+        expected_stderr = "MOCK: irc.post: mock_nick: Usage: SVN_REVISION [SVN_REVISIONS] REASON\n"
         OutputCapture().assert_outputs(self, run, args=["rollout 21654"], expected_stderr=expected_stderr)
+
+    def test_multi_rollout_no_reason(self):
+        expected_stderr = "MOCK: irc.post: mock_nick: Usage: SVN_REVISION [SVN_REVISIONS] REASON\n"
+        OutputCapture().assert_outputs(self, run, args=["rollout 21654 21655 r21656"], expected_stderr=expected_stderr)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list