Changeset 56642 in webkit
- Timestamp:
- Mar 26, 2010 2:45:56 PM (14 years ago)
- Location:
- trunk/WebKitTools
- Files:
-
- 1 added
- 7 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKitTools/ChangeLog
r56640 r56642 1 2010-03-26 Adam Barth <abarth@webkit.org> 2 3 Reviewed by Eric Seidel. 4 5 Refactor IRCBot controller logic to allow for commands 6 https://bugs.webkit.org/show_bug.cgi?id=36676 7 8 We need to move the controller logic into the tool package so it can 9 know about commands. The changes to queueengine could go in a 10 different patch, but we're going to need it anyway. 11 12 * Scripts/webkitpy/common/config/irc.py: Added. 13 * Scripts/webkitpy/common/net/irc/ircbot.py: 14 * Scripts/webkitpy/common/net/irc/ircproxy.py: 15 * Scripts/webkitpy/tool/bot/queueengine.py: 16 * Scripts/webkitpy/tool/bot/sheriffircbot.py: Added. 17 * Scripts/webkitpy/tool/commands/sheriffbot.py: 18 * Scripts/webkitpy/tool/main.py: 19 * Scripts/webkitpy/tool/mocktool.py: 20 1 21 2010-03-26 Adam Barth <abarth@webkit.org> 2 22 -
trunk/WebKitTools/Scripts/webkitpy/common/net/irc/ircbot.py
r56640 r56642 27 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 28 29 import webkitpy.common.config as config 30 29 31 from webkitpy.common.thread.messagepump import MessagePump, MessagePumpDelegate 30 32 from webkitpy.thirdparty.autoinstalled import ircbot 31 33 from webkitpy.thirdparty.autoinstalled import irclib 34 35 36 class IRCBotDelegate(object): 37 def irc_message_received(self, message): 38 raise NotImplementedError, "subclasses must implement" 39 40 def irc_nickname(self): 41 raise NotImplementedError, "subclasses must implement" 42 43 def irc_password(self): 44 raise NotImplementedError, "subclasses must implement" 32 45 33 46 … … 36 49 def __init__(self, 37 50 message_queue, 38 server="irc.freenode.net", 39 port=6667, 40 nickname="sheriffbot", 41 password=None, # sheriffbot actually needs a password. 42 channel="#webkit"): 51 delegate): 43 52 self._message_queue = message_queue 44 ircbot.SingleServerIRCBot.__init__(self, [(server, port, password)], nickname, nickname) 45 self._channel = channel 53 self._delegate = delegate 54 ircbot.SingleServerIRCBot.__init__( 55 self, 56 [( 57 config.irc.server, 58 config.irc.port, 59 self._delegate.irc_password() 60 )], 61 self._delegate.irc_nickname, 62 self._delegate.irc_nickname) 63 self._channel = config.irc.channel 46 64 47 65 # ircbot.SingleServerIRCBot methods … … 55 73 56 74 def on_pubmsg(self, connection, event): 57 salute = event.arguments()[0].split(":", 1) 58 if len(salute) > 1 and irclib.irc_lower(salute[0]) == irclib.irc_lower(self.connection.get_nickname()): 59 connection.privmsg(self._channel, '"Only you can prevent forest fires." -- Smokey the Bear') 75 request = event.arguments()[0].split(":", 1) 76 if len(request) > 1 and irclib.irc_lower(request[0]) == irclib.irc_lower(self.connection.get_nickname()): 77 response = self._delegate.irc_message_received(request[1]) 78 if response: 79 connection.privmsg(self._channel, response) 60 80 61 81 # MessagePumpDelegate methods -
trunk/WebKitTools/Scripts/webkitpy/common/net/irc/ircproxy.py
r56640 r56642 35 35 36 36 class _IRCThread(threading.Thread): 37 def __init__(self, message_queue, bot_class, password):37 def __init__(self, message_queue, irc_delegate): 38 38 threading.Thread.__init__(self) 39 39 self.setDaemon(True) 40 40 self._message_queue = message_queue 41 self._bot_class = bot_class 42 self._password = password 41 self._irc_delegate = irc_delegate 43 42 44 43 def run(self): 45 bot = self._bot_class(self._message_queue, password=self._password)44 bot = IRCBot(self._message_queue, self.irc_delegate) 46 45 bot.start() 47 46 48 47 49 48 class IRCProxy(object): 50 def __init__(self, bot_class=IRCBot, password=None):49 def __init__(self, irc_delegate): 51 50 log("Connecting to IRC") 52 51 self._message_queue = ThreadedMessageQueue() 53 self._child_thread = _IRCThread(self._message_queue, bot_class, password=password)52 self._child_thread = _IRCThread(self._message_queue, irc_delegate) 54 53 self._child_thread.start() 55 54 … … 61 60 self._message_queue.stop() 62 61 self._child_thread.join() 63 -
trunk/WebKitTools/Scripts/webkitpy/tool/bot/queueengine.py
r56586 r56642 66 66 67 67 class QueueEngine: 68 def __init__(self, name, delegate ):68 def __init__(self, name, delegate, message_queue=None): 69 69 self._name = name 70 70 self._delegate = delegate 71 self._message_queue = message_queue 71 72 self._output_tee = OutputTee() 72 73 … … 133 134 self._work_log = None 134 135 135 @classmethod 136 def _sleep_message(cls, message): 136 def _sleep_message(self, message): 137 137 wake_time = datetime.now() + timedelta(seconds=cls.seconds_to_sleep) 138 138 return "%s Sleeping until %s (%s)." % (message, wake_time.strftime(cls.log_date_format), cls.sleep_duration_text) 139 139 140 @classmethod 141 def _sleep(cls, message): 142 log(cls._sleep_message(message)) 143 time.sleep(cls.seconds_to_sleep) 140 def _sleep(self, message): 141 log(self._sleep_message(message)) 142 if self._message_queue: 143 self._message_queue.wait(self.seconds_to_sleep) 144 else: 145 time.sleep(self.seconds_to_sleep) -
trunk/WebKitTools/Scripts/webkitpy/tool/bot/sheriffircbot.py
r56641 r56642 27 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 28 29 import threading 29 from webkitpy.common.net.irc.ircbot import IRCBotDelegate 30 30 31 from webkitpy.common.net.irc.ircbot import IRCBot 32 from webkitpy.common.thread.threadedmessagequeue import ThreadedMessageQueue 33 from webkitpy.common.system.deprecated_logging import log 34 35 36 class _IRCThread(threading.Thread): 37 def __init__(self, message_queue, bot_class, password): 38 threading.Thread.__init__(self) 39 self.setDaemon(True) 40 self._message_queue = message_queue 41 self._bot_class = bot_class 31 class SheriffIRCBot(IRCBotDelegate): 32 def __init__(self, password): 42 33 self._password = password 43 34 44 def run(self): 45 bot = self._bot_class(self._message_queue, password=self._password) 46 bot.start() 35 # IRCBotDelegate methods 47 36 37 def irc_message_received(self, message): 38 return '"Only you can prevent forest fires." -- Smokey the Bear' 48 39 49 class IRCProxy(object): 50 def __init__(self, bot_class=IRCBot, password=None): 51 log("Connecting to IRC") 52 self._message_queue = ThreadedMessageQueue() 53 self._child_thread = _IRCThread(self._message_queue, bot_class, password=password) 54 self._child_thread.start() 40 def irc_nickname(self): 41 return "sheriffbot" 55 42 56 def post(self, message): 57 self._message_queue.post(message) 58 59 def disconnect(self): 60 log("Disconnecting from IRC...") 61 self._message_queue.stop() 62 self._child_thread.join() 63 43 def irc_password(self): 44 return self._password -
trunk/WebKitTools/Scripts/webkitpy/tool/commands/sheriffbot.py
r56586 r56642 29 29 import os 30 30 31 from webkitpy.tool.commands.queues import AbstractQueue32 31 from webkitpy.common.system.deprecated_logging import log 33 32 from webkitpy.common.config.ports import WebKitPort 34 33 from webkitpy.tool.bot.sheriffircbot import SheriffIRCBot 34 from webkitpy.tool.commands.queues import AbstractQueue 35 35 36 36 class SheriffBot(AbstractQueue): … … 44 44 def begin_work_queue(self): 45 45 AbstractQueue.begin_work_queue(self) 46 self.tool.ensure_irc_connected() 46 self._irc_delegate = SheriffIRCBot(self.tool.irc_password) 47 self.tool.ensure_irc_connected(self._irc_delegate) 47 48 48 49 def work_item_log_path(self, failure_info): -
trunk/WebKitTools/Scripts/webkitpy/tool/main.py
r56544 r56642 91 91 return self._checkout 92 92 93 # FIXME: Add a parameter for nickname? 94 def ensure_irc_connected(self): 93 def ensure_irc_connected(self, irc_delegate): 95 94 if not self._irc: 96 self._irc = IRCProxy( password=self._irc_password)95 self._irc = IRCProxy(irc_delegate) 97 96 98 97 def irc(self): … … 124 123 self.status_server.set_host(options.status_host) 125 124 if options.irc_password: 126 self. _irc_password = options.irc_password125 self.irc_password = options.irc_password 127 126 128 127 def should_execute_command(self, command): -
trunk/WebKitTools/Scripts/webkitpy/tool/mocktool.py
r56601 r56642 446 446 self._checkout = MockCheckout() 447 447 self.status_server = MockStatusServer() 448 self.irc_password = "MOCK irc password" 448 449 449 450 def scm(self): … … 453 454 return self._checkout 454 455 455 def ensure_irc_connected(self ):456 def ensure_irc_connected(self, delegate): 456 457 if not self._irc: 457 458 self._irc = MockIRC()
Note: See TracChangeset
for help on using the changeset viewer.