1# Copyright (c) 2010 Google Inc. All rights reserved. 2# Copyright (c) 2009 Apple Inc. All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: 7# 8# * Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# * Redistributions in binary form must reproduce the above 11# copyright notice, this list of conditions and the following disclaimer 12# in the documentation and/or other materials provided with the 13# distribution. 14# * Neither the name of Google Inc. nor the names of its 15# contributors may be used to endorse or promote products derived from 16# this software without specific prior written permission. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30 31from webkitpy.common.checkout.api import Checkout 32from webkitpy.common.checkout.scm import default_scm 33from webkitpy.common.config.ports import WebKitPort 34from webkitpy.common.net import bugzilla, buildbot, irc, statusserver 35from webkitpy.common.system import executive, filesystem, platforminfo, user, workspace 36from webkitpy.layout_tests import port 37 38 39class Host(object): 40 def __init__(self): 41 self.bugs = bugzilla.Bugzilla() 42 self.buildbot = buildbot.BuildBot() 43 self.executive = executive.Executive() 44 self._irc = None 45 self.filesystem = filesystem.FileSystem() 46 self.workspace = workspace.Workspace(self.filesystem, self.executive) 47 self._port = None 48 self.user = user.User() 49 self._scm = None 50 self._checkout = None 51 self.status_server = statusserver.StatusServer() 52 self.port_factory = port.factory 53 self.platform = platforminfo.PlatformInfo() 54 55 def _initialize_scm(self, patch_directories=None): 56 self._scm = default_scm(patch_directories) 57 self._checkout = Checkout(self.scm()) 58 59 def scm(self): 60 return self._scm 61 62 def checkout(self): 63 return self._checkout 64 65 def port(self): 66 return self._port 67 68 def ensure_irc_connected(self, irc_delegate): 69 if not self._irc: 70 self._irc = irc.ircproxy.IRCProxy(irc_delegate) 71 72 def irc(self): 73 # We don't automatically construct IRCProxy here because constructing 74 # IRCProxy actually connects to IRC. We want clients to explicitly 75 # connect to IRC. 76 return self._irc 77 78 def command_completed(self): 79 if self._irc: 80 self._irc.disconnect() 81