Пример #1
0
 def test_url_for_issue(self):
     mock_browser = MockBrowser()
     status_server = StatusServer(browser=mock_browser, bot_id='123')
     status_server.update_status('queue name', 'the status')
     self.assertEqual('queue name', mock_browser.params['queue_name'])
     self.assertEqual('the status', mock_browser.params['status'])
     self.assertEqual('123', mock_browser.params['bot_id'])
    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._deprecated_port = None
class WebKitPatch(MultiCommandTool, Host):
    global_options = [
        make_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="enable all logging"),
        make_option("-d", "--directory", action="append", dest="patch_directories", default=[], help="Directory to look at for changed files"),
        make_option("--status-host", action="store", dest="status_host", type="string", help="Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."),
        make_option("--bot-id", action="store", dest="bot_id", type="string", help="Identifier for this bot (if multiple bots are running for a queue)"),
        make_option("--seconds-to-sleep", action="store", default=120, type="int", help="Number of seconds to sleep in the task queue."),
        make_option("--port", action="store", dest="port", default=None, help="Specify a port (e.g., mac, qt, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._deprecated_port = None

    def deprecated_port(self):
        return self._deprecated_port

    def path(self):
        return self._path

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self.initialize_scm(options.patch_directories)
        if options.status_host:
            self.status_server.set_host(options.status_host)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        # If options.port is None, we'll get the default port for this platform.
        self._deprecated_port = DeprecatedPort.port(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm().supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (command.name, self.scm().display_name(), self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)
    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._deprecated_port = None
Пример #5
0
    def __init__(self, path):
        MultiCommandTool.__init__(self)

        self._path = path
        self.wakeup_event = threading.Event()
        self.bugs = Bugzilla()
        self.buildbot = BuildBot()
        self.executive = Executive()
        self._irc = None
        self._port = None
        self.user = User()
        self._scm = None
        self._checkout = None
        self.status_server = StatusServer()
        self.port_factory = port.factory
Пример #6
0
    def __init__(self, path):
        MultiCommandTool.__init__(self)

        self._path = path
        self.wakeup_event = threading.Event()
        # FIXME: All of these shared objects should move off onto a
        # separate "Tool" object.  WebKitPatch should inherit from
        # "Tool" and all these objects should use getters/setters instead of
        # manual getter functions (e.g. scm()).
        self.bugs = Bugzilla()
        self.buildbot = BuildBot()
        self.executive = Executive()
        self._irc = None
        self.filesystem = FileSystem()
        self._port = None
        self.user = User()
        self._scm = None
        self._checkout = None
        self.status_server = StatusServer()
        self.port_factory = port.factory
        self.platform = PlatformInfo()
Пример #7
0
class WebKitPatch(MultiCommandTool, Host):
    global_options = [
        make_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="enable all logging"),
        make_option("-d", "--directory", action="append", dest="patch_directories", default=[], help="Directory to look at for changed files"),
        make_option("--status-host", action="store", dest="status_host", type="string", help="Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."),
        make_option("--bot-id", action="store", dest="bot_id", type="string", help="Identifier for this bot (if multiple bots are running for a queue)"),
        make_option("--irc-password", action="store", dest="irc_password", type="string", help="Password to use when communicating via IRC."),
        make_option("--seconds-to-sleep", action="store", default=120, type="int", help="Number of seconds to sleep in the task queue."),
        make_option("--port", action="store", dest="port", default=None, help="Specify a port (e.g., mac, qt, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._irc = None
        self._port = None

    def port(self):
        return self._port

    def path(self):
        return self._path

    def ensure_irc_connected(self, irc_delegate):
        if not self._irc:
            self._irc = ircproxy.IRCProxy(irc_delegate)

    def irc(self):
        # We don't automatically construct IRCProxy here because constructing
        # IRCProxy actually connects to IRC.  We want clients to explicitly
        # connect to IRC.
        return self._irc

    def command_completed(self):
        if self._irc:
            self._irc.disconnect()

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self.initialize_scm(options.patch_directories)
        if options.status_host:
            self.status_server.set_host(options.status_host)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        if options.irc_password:
            self.irc_password = options.irc_password
        # If options.port is None, we'll get the default port for this platform.
        self._port = self.port_factory.get(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm().supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (command.name, self.scm().display_name(), self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)
Пример #8
0
class WebKitPatch(MultiCommandTool):
    global_options = [
        make_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="enable all logging"),
        make_option("--dry-run", action="store_true", dest="dry_run", default=False, help="do not touch remote servers"),
        make_option("--status-host", action="store", dest="status_host", type="string", help="Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."),
        make_option("--bot-id", action="store", dest="bot_id", type="string", help="Identifier for this bot (if multiple bots are running for a queue)"),
        make_option("--irc-password", action="store", dest="irc_password", type="string", help="Password to use when communicating via IRC."),
        make_option("--port", action="store", dest="port", default=None, help="Specify a port (e.g., mac, qt, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)

        self._path = path
        self.wakeup_event = threading.Event()
        self.bugs = Bugzilla()
        self.buildbot = BuildBot()
        self.executive = Executive()
        self._irc = None
        self._port = None
        self.user = User()
        self._scm = None
        self._checkout = None
        self.status_server = StatusServer()
        self.port_factory = port.factory

    def scm(self):
        # Lazily initialize SCM to not error-out before command line parsing (or when running non-scm commands).
        if not self._scm:
            self._scm = default_scm()
        return self._scm

    def checkout(self):
        if not self._checkout:
            self._checkout = Checkout(self.scm())
        return self._checkout

    def port(self):
        return self._port

    def ensure_irc_connected(self, irc_delegate):
        if not self._irc:
            self._irc = IRCProxy(irc_delegate)

    def irc(self):
        # We don't automatically construct IRCProxy here because constructing
        # IRCProxy actually connects to IRC.  We want clients to explicitly
        # connect to IRC.
        return self._irc

    def path(self):
        return self._path

    def command_completed(self):
        if self._irc:
            self._irc.disconnect()

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self._options = options
        if options.dry_run:
            self.scm().dryrun = True
            self.bugs.dryrun = True
        if options.status_host:
            self.status_server.set_host(options.status_host)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        if options.irc_password:
            self.irc_password = options.irc_password
        # If options.port is None, we'll get the default port for this platform.
        self._port = WebKitPort.port(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm().supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (command.name, self.scm().display_name(), self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)
Пример #9
0
class WebKitPatch(MultiCommandTool, Host):
    global_options = [
        make_option("-v",
                    "--verbose",
                    action="store_true",
                    dest="verbose",
                    default=False,
                    help="enable all logging"),
        make_option("-d",
                    "--directory",
                    action="append",
                    dest="patch_directories",
                    default=[],
                    help="Directory to look at for changed files"),
        make_option(
            "--status-host",
            action="store",
            dest="status_host",
            type="string",
            help=
            "Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."
        ),
        make_option(
            "--bot-id",
            action="store",
            dest="bot_id",
            type="string",
            help=
            "Identifier for this bot (if multiple bots are running for a queue)"
        ),
        make_option("--irc-password",
                    action="store",
                    dest="irc_password",
                    type="string",
                    help="Password to use when communicating via IRC."),
        make_option("--port",
                    action="store",
                    dest="port",
                    default=None,
                    help="Specify a port (e.g., mac, qt, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._irc = None
        self._deprecated_port = None

    def deprecated_port(self):
        return self._deprecated_port

    def path(self):
        return self._path

    def ensure_irc_connected(self, irc_delegate):
        if not self._irc:
            self._irc = ircproxy.IRCProxy(irc_delegate)

    def irc(self):
        # We don't automatically construct IRCProxy here because constructing
        # IRCProxy actually connects to IRC.  We want clients to explicitly
        # connect to IRC.
        return self._irc

    def command_completed(self):
        if self._irc:
            self._irc.disconnect()

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self.initialize_scm(options.patch_directories)
        if options.status_host:
            self.status_server.set_host(options.status_host)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        if options.irc_password:
            self.irc_password = options.irc_password
        # If options.port is None, we'll get the default port for this platform.
        self._deprecated_port = DeprecatedPort.port(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm(
        ).supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (
                command.name, self.scm().display_name(),
                self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)
Пример #10
0
class WebKitPatch(MultiCommandTool, Host):
    global_options = [
        make_option("-v",
                    "--verbose",
                    action="store_true",
                    dest="verbose",
                    default=False,
                    help="enable all logging"),
        make_option("-d",
                    "--directory",
                    action="append",
                    dest="patch_directories",
                    default=[],
                    help="Directory to look at for changed files"),
        make_option(
            "--status-host",
            action="store",
            dest="status_host",
            type="string",
            help=
            "Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."
        ),
        make_option("--status-host-uses-http",
                    action="store_false",
                    default=True,
                    dest="status_host_uses_https",
                    help="Use HTTP when querying the status host."),
        make_option(
            "--bot-id",
            action="store",
            dest="bot_id",
            type="string",
            help=
            "Identifier for this bot (if multiple bots are running for a queue)"
        ),
        make_option("--irc-password",
                    action="store",
                    dest="irc_password",
                    type="string",
                    help="Password to use when communicating via IRC."),
        make_option("--seconds-to-sleep",
                    action="store",
                    default=120,
                    type="int",
                    help="Number of seconds to sleep in the task queue."),
        make_option("--port",
                    action="store",
                    dest="port",
                    default=None,
                    help="Specify a port (e.g., mac, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._irc = None
        self._deprecated_port = None

    def deprecated_port(self):
        return self._deprecated_port

    def path(self):
        return self._path

    def ensure_irc_connected(self, irc_delegate):
        if not self._irc:
            self._irc = ircproxy.IRCProxy(irc_delegate)

    def irc(self):
        # We don't automatically construct IRCProxy here because constructing
        # IRCProxy actually connects to IRC.  We want clients to explicitly
        # connect to IRC.
        return self._irc

    def command_completed(self):
        if self._irc:
            self._irc.disconnect()

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    @staticmethod
    def _status_server_api_key_from_git():
        try:
            if not Git.in_working_directory(os.getcwd()):
                return None
            return Git.read_git_config('webkit.status-api-key')
        except OSError as e:
            # Catch and ignore OSError exceptions such as "no such file
            # or directory" (OSError errno 2), which imply that the Git
            # command cannot be found/is not installed.
            _log.warning('Could not read API key from Git: {}'.format(str(e)))
        return None

    @staticmethod
    def _status_server_api_key():
        api_key = os.environ.get('WEBKIT_STATUS_API_KEY')
        if not api_key:
            api_key = WebKitPatch._status_server_api_key_from_git()
        return api_key

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self.initialize_scm(options.patch_directories)

        api_key = self._status_server_api_key()
        if api_key:
            self.status_server.set_api_key(api_key)

        if options.status_host:
            self.status_server.set_host(options.status_host)
        self.status_server.set_use_https(options.status_host_uses_https)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        if options.irc_password:
            self.irc_password = options.irc_password
        # If options.port is None, we'll get the default port for this platform.
        self._deprecated_port = DeprecatedPort.port(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm(
        ).supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (
                command.name, self.scm().display_name(),
                self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)
class WebKitPatch(MultiCommandTool, Host):
    global_options = [
        make_option("-v",
                    "--verbose",
                    action="store_true",
                    dest="verbose",
                    default=False,
                    help="enable all logging"),
        make_option("-d",
                    "--directory",
                    action="append",
                    dest="patch_directories",
                    default=[],
                    help="Directory to look at for changed files"),
        make_option(
            "--status-host",
            action="store",
            dest="status_host",
            type="string",
            help=
            "Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."
        ),
        make_option(
            "--bot-id",
            action="store",
            dest="bot_id",
            type="string",
            help=
            "Identifier for this bot (if multiple bots are running for a queue)"
        ),
        make_option("--seconds-to-sleep",
                    action="store",
                    default=120,
                    type="int",
                    help="Number of seconds to sleep in the task queue."),
        make_option("--port",
                    action="store",
                    dest="port",
                    default=None,
                    help="Specify a port (e.g., mac, qt, gtk, ...)."),
    ]

    def __init__(self, path):
        MultiCommandTool.__init__(self)
        Host.__init__(self)
        self._path = path
        self.status_server = StatusServer()

        self.wakeup_event = threading.Event()
        self._deprecated_port = None

    def deprecated_port(self):
        return self._deprecated_port

    def path(self):
        return self._path

    def should_show_in_main_help(self, command):
        if not command.show_in_main_help:
            return False
        if command.requires_local_commits:
            return self.scm().supports_local_commits()
        return True

    # FIXME: This may be unnecessary since we pass global options to all commands during execute() as well.
    def handle_global_options(self, options):
        self.initialize_scm(options.patch_directories)
        if options.status_host:
            self.status_server.set_host(options.status_host)
        if options.bot_id:
            self.status_server.set_bot_id(options.bot_id)
        # If options.port is None, we'll get the default port for this platform.
        self._deprecated_port = DeprecatedPort.port(options.port)

    def should_execute_command(self, command):
        if command.requires_local_commits and not self.scm(
        ).supports_local_commits():
            failure_reason = "%s requires local commits using %s in %s." % (
                command.name, self.scm().display_name(),
                self.scm().checkout_root)
            return (False, failure_reason)
        return (True, None)