2009-11-20 Adam Barth <abarth@webkit.org>
[WebKit-https.git] / WebKitTools / Scripts / modules / commands / queries.py
1 #!/usr/bin/env python
2 # Copyright (c) 2009, Google Inc. All rights reserved.
3 # Copyright (c) 2009 Apple Inc. All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
7 # met:
8
9 #     * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 #     * Redistributions in binary form must reproduce the above
12 # copyright notice, this list of conditions and the following disclaimer
13 # in the documentation and/or other materials provided with the
14 # distribution.
15 #     * Neither the name of Google Inc. nor the names of its
16 # contributors may be used to endorse or promote products derived from
17 # this software without specific prior written permission.
18
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 # FIXME: Trim down this import list once we have unit tests.
32 import os
33 import re
34 import StringIO
35 import subprocess
36 import sys
37 import time
38
39 from datetime import datetime, timedelta
40 from optparse import make_option
41
42 from modules.bugzilla import Bugzilla, parse_bug_id
43 from modules.buildbot import BuildBot
44 from modules.changelogs import ChangeLog
45 from modules.comments import bug_comment_from_commit_text
46 from modules.grammar import pluralize
47 from modules.landingsequence import LandingSequence, ConditionalLandingSequence
48 from modules.logging import error, log, tee
49 from modules.multicommandtool import MultiCommandTool, Command
50 from modules.patchcollection import PatchCollection
51 from modules.scm import CommitMessage, detect_scm_system, ScriptError, CheckoutNeedsUpdate
52 from modules.statusbot import StatusBot
53 from modules.webkitlandingscripts import WebKitLandingScripts, commit_message_for_this_commit
54 from modules.webkitport import WebKitPort
55 from modules.workqueue import WorkQueue, WorkQueueDelegate
56
57 class BugsToCommit(Command):
58     name = "bugs-to-commit"
59     def __init__(self):
60         Command.__init__(self, "Bugs in the commit queue")
61
62     def execute(self, options, args, tool):
63         bug_ids = tool.bugs.fetch_bug_ids_from_commit_queue()
64         for bug_id in bug_ids:
65             print "%s" % bug_id
66
67
68 class PatchesToCommit(Command):
69     name = "patches-to-commit"
70     def __init__(self):
71         Command.__init__(self, "Patches in the commit queue")
72
73     def execute(self, options, args, tool):
74         patches = tool.bugs.fetch_patches_from_commit_queue()
75         log("Patches in commit queue:")
76         for patch in patches:
77             print "%s" % patch["url"]
78
79
80 class ReviewedPatches(Command):
81     name = "reviewed-patches"
82     def __init__(self):
83         Command.__init__(self, "r+'d patches on a bug", "BUGID")
84
85     def execute(self, options, args, tool):
86         bug_id = args[0]
87         patches_to_land = tool.bugs.fetch_reviewed_patches_from_bug(bug_id)
88         for patch in patches_to_land:
89             print "%s" % patch["url"]
90
91
92 class TreeStatus(Command):
93     name = "tree-status"
94     def __init__(self):
95         Command.__init__(self, "Print out the status of the webkit builders.")
96
97     def execute(self, options, args, tool):
98         for builder in tool.buildbot.builder_statuses():
99             status_string = "ok" if builder["is_green"] else "FAIL"
100             print "%s : %s" % (status_string.ljust(4), builder["name"])