[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