OLD | NEW |
| (Empty) |
1 | |
2 from twisted.internet import gtk2reactor | |
3 gtk2reactor.install() | |
4 from twisted.internet import reactor | |
5 from twisted.python import util | |
6 from twisted.spread import pb | |
7 from twisted.cred import credentials | |
8 import gtk.glade | |
9 import sys, re | |
10 | |
11 class DebugWidget: | |
12 def __init__(self, master="localhost:8007", passwd="debugpw"): | |
13 self.connected = 0 | |
14 try: | |
15 host, port = re.search(r'(.+):(\d+)', master).groups() | |
16 except: | |
17 print "unparseable master location '%s'" % master | |
18 print " expecting something more like localhost:8007" | |
19 raise | |
20 self.host = host | |
21 self.port = int(port) | |
22 self.passwd = passwd | |
23 self.remote = None | |
24 xml = self.xml = gtk.glade.XML(util.sibpath(__file__, "debug.glade")) | |
25 g = xml.get_widget | |
26 self.buildname = g('buildname') | |
27 self.filename = g('filename') | |
28 self.connectbutton = g('connectbutton') | |
29 self.connectlabel = g('connectlabel') | |
30 g('window1').connect('destroy', lambda win: gtk.main_quit()) | |
31 # put the master info in the window's titlebar | |
32 g('window1').set_title("Buildbot Debug Tool: %s" % master) | |
33 c = xml.signal_connect | |
34 c('do_connect', self.do_connect) | |
35 c('do_reload', self.do_reload) | |
36 c('do_rebuild', self.do_rebuild) | |
37 c('do_poke_irc', self.do_poke_irc) | |
38 c('do_build', self.do_build) | |
39 c('do_ping', self.do_ping) | |
40 c('do_commit', self.do_commit) | |
41 c('on_usebranch_toggled', self.usebranch_toggled) | |
42 self.usebranch_toggled(g('usebranch')) | |
43 c('on_userevision_toggled', self.userevision_toggled) | |
44 self.userevision_toggled(g('userevision')) | |
45 c('do_current_offline', self.do_current, "offline") | |
46 c('do_current_idle', self.do_current, "idle") | |
47 c('do_current_waiting', self.do_current, "waiting") | |
48 c('do_current_building', self.do_current, "building") | |
49 | |
50 def do_connect(self, widget): | |
51 if self.connected: | |
52 self.connectlabel.set_text("Disconnecting...") | |
53 if self.remote: | |
54 self.remote.broker.transport.loseConnection() | |
55 else: | |
56 self.connectlabel.set_text("Connecting...") | |
57 f = pb.PBClientFactory() | |
58 creds = credentials.UsernamePassword("debug", self.passwd) | |
59 d = f.login(creds) | |
60 reactor.connectTCP(self.host, int(self.port), f) | |
61 d.addCallbacks(self.connect_complete, self.connect_failed) | |
62 def connect_complete(self, ref): | |
63 self.connectbutton.set_label("Disconnect") | |
64 self.connectlabel.set_text("Connected") | |
65 self.connected = 1 | |
66 self.remote = ref | |
67 self.remote.callRemote("print", "hello cleveland") | |
68 self.remote.notifyOnDisconnect(self.disconnected) | |
69 def connect_failed(self, why): | |
70 self.connectlabel.set_text("Failed") | |
71 print why | |
72 def disconnected(self, ref): | |
73 self.connectbutton.set_label("Connect") | |
74 self.connectlabel.set_text("Disconnected") | |
75 self.connected = 0 | |
76 self.remote = None | |
77 | |
78 def do_reload(self, widget): | |
79 if not self.remote: | |
80 return | |
81 d = self.remote.callRemote("reload") | |
82 d.addErrback(self.err) | |
83 def do_rebuild(self, widget): | |
84 print "Not yet implemented" | |
85 return | |
86 def do_poke_irc(self, widget): | |
87 if not self.remote: | |
88 return | |
89 d = self.remote.callRemote("pokeIRC") | |
90 d.addErrback(self.err) | |
91 | |
92 def do_build(self, widget): | |
93 if not self.remote: | |
94 return | |
95 name = self.buildname.get_text() | |
96 branch = None | |
97 if self.xml.get_widget("usebranch").get_active(): | |
98 branch = self.xml.get_widget('branch').get_text() | |
99 if branch == '': | |
100 branch = None | |
101 revision = None | |
102 if self.xml.get_widget("userevision").get_active(): | |
103 revision = self.xml.get_widget('revision').get_text() | |
104 if revision == '': | |
105 revision = None | |
106 reason = "debugclient 'Request Build' button pushed" | |
107 properties = {} | |
108 d = self.remote.callRemote("requestBuild", | |
109 name, reason, branch, revision, properties) | |
110 d.addErrback(self.err) | |
111 | |
112 def do_ping(self, widget): | |
113 if not self.remote: | |
114 return | |
115 name = self.buildname.get_text() | |
116 d = self.remote.callRemote("pingBuilder", name) | |
117 d.addErrback(self.err) | |
118 | |
119 def usebranch_toggled(self, widget): | |
120 rev = self.xml.get_widget('branch') | |
121 if widget.get_active(): | |
122 rev.set_sensitive(True) | |
123 else: | |
124 rev.set_sensitive(False) | |
125 | |
126 def userevision_toggled(self, widget): | |
127 rev = self.xml.get_widget('revision') | |
128 if widget.get_active(): | |
129 rev.set_sensitive(True) | |
130 else: | |
131 rev.set_sensitive(False) | |
132 | |
133 def do_commit(self, widget): | |
134 if not self.remote: | |
135 return | |
136 filename = self.filename.get_text() | |
137 who = self.xml.get_widget("who").get_text() | |
138 | |
139 branch = None | |
140 if self.xml.get_widget("usebranch").get_active(): | |
141 branch = self.xml.get_widget('branch').get_text() | |
142 if branch == '': | |
143 branch = None | |
144 | |
145 revision = None | |
146 if self.xml.get_widget("userevision").get_active(): | |
147 revision = self.xml.get_widget('revision').get_text() | |
148 try: | |
149 revision = int(revision) | |
150 except ValueError: | |
151 pass | |
152 if revision == '': | |
153 revision = None | |
154 | |
155 kwargs = { 'revision': revision, 'who': who } | |
156 if branch: | |
157 kwargs['branch'] = branch | |
158 d = self.remote.callRemote("fakeChange", filename, **kwargs) | |
159 d.addErrback(self.err) | |
160 | |
161 def do_current(self, widget, state): | |
162 if not self.remote: | |
163 return | |
164 name = self.buildname.get_text() | |
165 d = self.remote.callRemote("setCurrentState", name, state) | |
166 d.addErrback(self.err) | |
167 def err(self, failure): | |
168 print "received error:", failure | |
169 | |
170 def run(self): | |
171 reactor.run() | |
172 | |
173 if __name__ == '__main__': | |
174 master = "localhost:8007" | |
175 if len(sys.argv) > 1: | |
176 master = sys.argv[1] | |
177 passwd = "debugpw" | |
178 if len(sys.argv) > 2: | |
179 passwd = sys.argv[2] | |
180 d = DebugWidget(master, passwd) | |
181 d.run() | |
OLD | NEW |