hgpoll.py

changeset 73
d67cc4fbc3f1
parent 72
2266d6d73de3
child 76
a2fe9ba3041a
equal deleted inserted replaced
72:2266d6d73de3 73:d67cc4fbc3f1
1 impot hgapi 1 import hgapi
2 import time
3 import re
4 import bt as Bt
5 import irc as Irc
6 from datetime import datetime
2 from configfile import Config 7 from configfile import Config
3 g_needCommitsTxtRebuild = True 8 g_needCommitsTxtRebuild = True
4 9
5 def make_commits_txt(): 10 def make_commits_txt():
6 global g_needCommitsTxtRebuild 11 global g_needCommitsTxtRebuild
7 12
8 if g_needCommitsTxtRebuild == False: 13 if g_needCommitsTxtRebuild == False:
9 return 14 return
10 15
11 print 'Building commits.txt...' 16 print 'Building commits.txt...'
12 # Update zandronum-everything 17 # Update zandronum-everything
13 repo = hgapi.Repo ('zandronum-everything') 18 repo = hgapi.Repo ('zandronum-everything')
14 repo.hg_command ('pull', '../zandronum-sandbox') 19 repo.hg_command ('pull', '../zandronum-sandbox')
15 repo.hg_command ('pull', '../zandronum-sandbox-stable') 20 repo.hg_command ('pull', '../zandronum-sandbox-stable')
16
17 data = repo.hg_command ('log', '--template', '{node} {date|hgdate}\n') 21 data = repo.hg_command ('log', '--template', '{node} {date|hgdate}\n')
18
19 f = open ('commits.txt', 'w') 22 f = open ('commits.txt', 'w')
20 23
21 for line in data.split ('\n'): 24 for line in data.split ('\n'):
22 if line == '': 25 if line == '':
23 continue 26 continue
24 27
25 words = line.split (' ') 28 words = line.split (' ')
26 timestamp = int (words[1]) 29 timestamp = int (words[1])
27 f.write ('%s %s\n' % (words[0], datetime.utcfromtimestamp (timestamp).strftime ('%y%m%d-%H%M'))) 30 f.write ('%s %s\n' % (words[0], datetime.utcfromtimestamp (timestamp).strftime ('%y%m%d-%H%M')))
31
28 f.close() 32 f.close()
29 g_needCommitsTxtRebuild = False 33 g_needCommitsTxtRebuild = False
30 #enddef
31 34
32 ' Check if a repository exists ' 35 ' Check if a repository exists '
33 def check_repo_exists (repo_name, repo_owner): 36 def check_repo_exists (repo_name, repo_owner):
34 print 'Checking that %s exists...' % repo_name 37 print 'Checking that %s exists...' % repo_name
35 repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name) 38 repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name)
36 zanrepo = hgapi.Repo (repo_name) 39 zanrepo = hgapi.Repo (repo_name)
37 40
38 try: 41 try:
39 zanrepo.hg_command ('id', '.') 42 zanrepo.hg_command ('id', '.')
40 except hgapi.hgapi.HgException: 43 except hgapi.hgapi.HgException:
41 # If the repo does not exist, clone it. zandronum-everything can be spawned off other repos though 44 # If the repo does not exist, clone it. zandronum-everything can be spawned off other repos though
42 if repo_name == 'zandronum-everything': 45 if repo_name == 'zandronum-everything':
43 if not os.path.exists (repo_name): 46 if not os.path.exists (repo_name):
44 os.makedirs (repo_name) 47 os.makedirs (repo_name)
45 48
46 global g_needCommitsTxtRebuild 49 global g_needCommitsTxtRebuild
47 g_needCommitsTxtRebuild = True 50 g_needCommitsTxtRebuild = True
48 print 'Init %s' % repo_name 51 print 'Init %s' % repo_name
49 zanrepo.hg_command ('init') 52 zanrepo.hg_command ('init')
50 print 'Cloning zandronum-sandbox into %s' % repo_name 53 print 'Cloning zandronum-sandbox into %s' % repo_name
52 print 'Cloning zandronum-sandbox-stable into %s' % repo_name 55 print 'Cloning zandronum-sandbox-stable into %s' % repo_name
53 zanrepo.hg_command ('pull', '../zandronum-sandbox-stable') 56 zanrepo.hg_command ('pull', '../zandronum-sandbox-stable')
54 print 'Done' 57 print 'Done'
55 make_commits_txt() 58 make_commits_txt()
56 return 59 return
57 #fi 60
58
59 try: 61 try:
60 print 'Cloning %s...' % repo_name 62 print 'Cloning %s...' % repo_name
61 zanrepo.hg_clone (repo_url, repo_name) 63 zanrepo.hg_clone (repo_url, repo_name)
62 print 'Cloning done.' 64 print 'Cloning done.'
63 except Exception as e: 65 except Exception as e:
64 print 'Unable to clone %s from %s: %s' % (repo_name, repo_url, str (`e`)) 66 print 'Unable to clone %s from %s: %s' % (repo_name, repo_url, str (`e`))
65 quit(1) 67 quit (1)
66 #tried 68
67 #enddef 69 def init():
68 70 check_repo_exists ('zandronum', 'Torr_Samaho')
69 check_repo_exists ('zandronum', 'Torr_Samaho') 71 check_repo_exists ('zandronum-stable', 'Torr_Samaho')
70 check_repo_exists ('zandronum-stable', 'Torr_Samaho') 72 check_repo_exists ('zandronum-sandbox', 'crimsondusk')
71 check_repo_exists ('zandronum-sandbox', 'crimsondusk') 73 check_repo_exists ('zandronum-sandbox-stable', 'crimsondusk')
72 check_repo_exists ('zandronum-sandbox-stable', 'crimsondusk') 74 check_repo_exists ('zandronum-everything', '')
73 check_repo_exists ('zandronum-everything', '') 75 global repocheck_timeout
74 76 repocheck_timeout = (time.time()) + 15
75 repocheck_timeout = (time.time()) + 15
76 77
77 def get_commit_data (zanrepo, rev, template): 78 def get_commit_data (zanrepo, rev, template):
78 return zanrepo.hg_command ('log', '-l', '1', '-r', rev, '--template', template) 79 return zanrepo.hg_command ('log', '-l', '1', '-r', rev, '--template', template)
79 #enddef
80 80
81 def decipher_hgapi_error (e): 81 def decipher_hgapi_error (e):
82 # Blah, hgapi, why must your error messages be so mangled? 82 # Blah, hgapi, why must your error messages be so mangled?
83 try: 83 try:
84 rawmsg = e.message.replace('\n', '').replace('" +','').replace('\t','') 84 rawmsg = e.message.replace('\n', '').replace('" +','').replace('\t','')
85 errmsg = re.compile (r'.*: tErr: (.*)Out:.*').match (rawmsg).group (1) 85 errmsg = re.compile (r'.*: tErr: (.*)Out:.*').match (rawmsg).group (1)
86 return [True, errmsg] 86 return [True, errmsg]
87 except: 87 except:
88 return [False, ''] 88 return [False, '']
89 #endtry 89
90 #enddef 90 def bbcodify (commit_diffstat):
91 91 result = ''
92 def bbcodify(commit_diffstat): 92
93 result=''
94 for line in commit_diffstat.split('\n'): 93 for line in commit_diffstat.split('\n'):
95 # Add green color-tags for the ++++++++++ stream
96 rex = re.compile (r'^(.*)\|(.*) (\+*)(-*)(.*)$') 94 rex = re.compile (r'^(.*)\|(.*) (\+*)(-*)(.*)$')
97 match = rex.match (line) 95 match = rex.match (line)
98 if match: 96 if match:
99 line = '%s|%s [color=#5F7]%s[/color][color=#F53]%s[/color]%s\n' \ 97 line = '%s|%s [color=#5F7]%s[/color][color=#F53]%s[/color]%s\n' \
100 % (match.group (1), match.group (2), match.group (3), match.group (4), match.group (5)) 98 % (match.group (1), match.group (2), match.group (3), match.group (4), match.group (5))
101 99
102 # Tracker doesn't seem to like empty color tags 100 # Tracker doesn't seem to like empty color tags
103 line = line.replace ('[color=#5F7][/color]', '').replace ('[color=#F53][/color]', '') 101 line = line.replace ('[color=#5F7][/color]', '').replace ('[color=#F53][/color]', '')
104 #else: 102
105 #rex = re.compile (r'^(.*) ([0-9]+) insertions\(\+\), ([0-9]+) deletions\(\-\)$')
106 #match = rex.match (line)
107 #if match:
108 #line = '%s [b][color=green]%s[/color][/b] insertions, [b][color=red]%s[/color][/b] deletions\n' \
109 #% (match.group (1), match.group (2), match.group (3))
110
111 result += line 103 result += line
112 #done 104
113
114 return result 105 return result
115 #enddef
116 106
117 def find_developer_by_email (commit_email): 107 def find_developer_by_email (commit_email):
118 for developer, emails in Config.get_value ('developer_emails', default={}).iteritems(): 108 for developer, emails in Config.get_value ('developer_emails', default={}).iteritems():
119 for email in emails: 109 if commit_email in emails:
120 if commit_email == email: 110 return developer
121 return developer 111
122 #fi
123 #done
124 #done
125
126 return '' 112 return ''
127 #enddef 113
128
129 ' Retrieves and processes commits for zandronum repositories '
130 ' Ensure both repositories are OK before using this! '
131 def poll(): 114 def poll():
115 global repocheck_timeout
116 if time.time() < repocheck_timeout:
117 return
118
132 for n in ['zandronum-stable', 'zandronum', 'zandronum-sandbox', 'zandronum-sandbox-stable']: 119 for n in ['zandronum-stable', 'zandronum', 'zandronum-sandbox', 'zandronum-sandbox-stable']:
133 process_one_repo (n) 120 poll_one_repo (n)
134 121
135 def process_one_repo (repo_name): 122 hgns = Config.get_node ('hg')
123 repocheck_timeout = time.time() + hgns.get_value ('checkinterval', default=15) * 60
124
125 def poll_one_repo (repo_name):
136 global repocheck_timeout 126 global repocheck_timeout
137 global g_clients
138
139 hgns = Config.get_node ('hg') 127 hgns = Config.get_node ('hg')
140 128
141 if not hgns.get_value ('track', default=True): 129 if not hgns.get_value ('track', default=True):
142 return 130 return
143 131
144 usestable = repo_name == 'zandronum-stable' 132 usestable = repo_name == 'zandronum-stable'
145 usesandbox = repo_name == 'zandronum-sandbox' or repo_name == 'zandronum-sandbox-stable' 133 usesandbox = repo_name == 'zandronum-sandbox' or repo_name == 'zandronum-sandbox-stable'
146 repo_owner = 'Torr_Samaho' if not usesandbox else 'crimsondusk' 134 repo_owner = 'Torr_Samaho' if not usesandbox else 'crimsondusk'
147 repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name) 135 repo_url = 'https://bitbucket.org/%s/%s' % (repo_owner, repo_name)
148 num_commits = 0 136 num_commits = 0
149 btuser, btpassword = bt_credentials()
150
151 if time.time() < repocheck_timeout:
152 return
153
154 repocheck_timeout = time.time() + hgns.get_value ('checkinterval', default=15) * 60
155 zanrepo = hgapi.Repo (repo_name) 137 zanrepo = hgapi.Repo (repo_name)
156 commit_data = [] 138 commit_data = []
157 delimeter = '@@@@@@@@@@' 139 delimeter = '@@@@@@@@@@'
158 140 print 'Checking %s for updates' % repo_name
141
159 try: 142 try:
160 data = zanrepo.hg_command ('incoming', '--quiet', '--template', 143 data = zanrepo.hg_command ('incoming', '--quiet', '--template',
161 '{node|short} {desc}' + delimeter) 144 '{node|short} {desc}' + delimeter)
162 except hgapi.hgapi.HgException as e: 145 except hgapi.hgapi.HgException as e:
163 deciphered = decipher_hgapi_error (e) 146 deciphered = decipher_hgapi_error (e)
164 147
165 if deciphered[0] and len(deciphered[1]) > 0: 148 if deciphered[0] and len(deciphered[1]) > 0:
166 chanlog ("error while using hg import on %s: %s" % (repo_name, deciphered[1])) 149 Irc.broadcast ("error while using hg import on %s: %s" % (repo_name, deciphered[1]))
167 #fi 150
168
169 return 151 return
170 except Exception as e: 152 except Exception as e:
171 chanlog ("%s" % `e`) 153 Irc.broadcast ("%s" % `e`)
172 return 154 return
173 #tried 155
174
175 for line in data.split (delimeter): 156 for line in data.split (delimeter):
176 if line == '': 157 if line == '':
177 continue 158 continue
178 #fi 159
179
180 rex = re.compile (r'([^ ]+) (.+)') 160 rex = re.compile (r'([^ ]+) (.+)')
181 match = rex.match (line) 161 match = rex.match (line)
182 failed = False 162 failed = False
183 163
184 if not match: 164 if not match:
185 chanlog ('malformed hg data: %s' % line) 165 Irc.broadcast ('malformed hg data: %s' % line)
186 continue 166 continue
187 #fi 167
188
189 commit_node = match.group (1) 168 commit_node = match.group (1)
190 commit_message = match.group (2) 169 commit_message = match.group (2)
191 commit_data.append ([commit_node, commit_message]) 170 commit_data.append ([commit_node, commit_message])
192 #done 171
193 172 print '%d new commits on %s' % (len (commit_data), repo_name)
173
194 if len (commit_data) > 0: 174 if len (commit_data) > 0:
195 pull_args = []; 175 pull_args = [];
196 176
197 for commit in commit_data: 177 for commit in commit_data:
198 pull_args.append ('-r'); 178 pull_args.append ('-r');
199 pull_args.append (commit[0]); 179 pull_args.append (commit[0]);
200 #done 180
201 181 print 'Pulling new commits...'
202 try: 182 try:
203 zanrepo.hg_command ('pull', *pull_args) 183 zanrepo.hg_command ('pull', *pull_args)
204 184
205 # Also pull these commits to the zandronum main repository 185 # Also pull these commits to the zandronum main repository
206 if usestable: 186 if usestable:
207 devrepo = hgapi.Repo ('zandronum') 187 devrepo = hgapi.Repo ('zandronum')
208 devrepo.hg_command ('pull', '../zandronum-stable', *pull_args) 188 devrepo.hg_command ('pull', '../zandronum-stable', *pull_args)
209 #fi 189
210
211 # Pull everything into sandboxes too 190 # Pull everything into sandboxes too
212 if not usesandbox: 191 if not usesandbox:
213 devrepo = hgapi.Repo ('zandronum-sandbox') 192 devrepo = hgapi.Repo ('zandronum-sandbox')
214 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 193 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args)
215 194
216 devrepo = hgapi.Repo ('zandronum-sandbox-stable') 195 devrepo = hgapi.Repo ('zandronum-sandbox-stable')
217 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 196 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args)
218 #fi 197
219
220 devrepo = hgapi.Repo ('zandronum-everything') 198 devrepo = hgapi.Repo ('zandronum-everything')
221 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args) 199 devrepo.hg_command ('pull', '../%s' % repo_name, *pull_args)
222 200
223 global g_needCommitsTxtRebuild 201 global g_needCommitsTxtRebuild
224 g_needCommitsTxtRebuild = True 202 g_needCommitsTxtRebuild = True
225 except Exception as e: 203 except Exception as e:
226 chanlog ('Warning: unable to pull: %s' % `e`) 204 Irc.broadcast ('Warning: unable to pull: %s' % `e`)
227 return 205 return
228 #tried 206
229 #fi
230
231 for commit in commit_data: 207 for commit in commit_data:
232 commit_node = commit[0] 208 commit_node = commit[0]
233 commit_message = commit[1] 209 commit_message = commit[1]
234 210 print 'Processing new commit %s...' % commit_node
211
235 try: 212 try:
236 if usesandbox: 213 if usesandbox:
237 commit_author = get_commit_data (zanrepo, commit_node, '{author}') 214 commit_author = get_commit_data (zanrepo, commit_node, '{author}')
238 commit_url = '%s/commits/%s' % (repo_url, commit_node) 215 commit_url = '%s/commits/%s' % (repo_url, commit_node)
239 commit_email = '' 216 commit_email = ''
240 217
241 # Remove the email address from the author if possible 218 # Remove the email address from the author if possible
242 rex = re.compile (r'^(.+) <([^>]+)>$.*') 219 rex = re.compile (r'^(.+) <([^>]+)>$.*')
243 match = rex.match (commit_author) 220 match = rex.match (commit_author)
244 if match: 221 if match:
245 commit_author = match.group (1) 222 commit_author = match.group (1)
246 commit_email = match.group (2) 223 commit_email = match.group (2)
247 #fi 224
248
249 commit_trackeruser = find_developer_by_email (commit_email) 225 commit_trackeruser = find_developer_by_email (commit_email)
250 committer = commit_trackeruser if commit_trackeruser != '' else commit_author 226 committer = commit_trackeruser if commit_trackeruser != '' else commit_author
251 227
252 for irc_client in g_clients: 228 for irc_client in Irc.all_clients:
253 for channel in irc_client.cfg['channels']: 229 for channel in irc_client.channels:
254 if 'btprivate' in channel and channel['btprivate'] == True: 230 if channel.get_value ('btprivate', False):
255 irc_client.privmsg (channel['name'], 231 irc_client.privmsg (channel.get_value ('name'),
256 "%s: new commit %s by %s: %s" 232 "%s: new commit %s by %s: %s"
257 % (repo_name, commit_node, committer, commit_url)) 233 % (repo_name, commit_node, committer, commit_url))
258 234
259 for line in commit_message.split ('\n'): 235 for line in commit_message.split ('\n'):
260 irc_client.privmsg (channel['name'], line) 236 irc_client.privmsg (channel.get_value ('name'), line)
261 #fi 237
262 #done
263 #done
264
265 num_commits += 1 238 num_commits += 1
266 continue 239 continue
267 #fi 240
268
269 rex = re.compile (r'^.*(fixes|resolves|addresses|should fix) ([0-9]+).*$') 241 rex = re.compile (r'^.*(fixes|resolves|addresses|should fix) ([0-9]+).*$')
270 match = rex.match (commit_message) 242 match = rex.match (commit_message)
271 243
272 if not match: 244 if not match:
273 continue # no "fixes" message in the commit 245 continue # no "fixes" message in the commit
274 #fi 246
275
276 ticket_id = int (match.group (2)) 247 ticket_id = int (match.group (2))
277 248
278 # Acquire additional data 249 # Acquire additional data
279 moredata = get_commit_data (zanrepo, commit_node, 250 moredata = get_commit_data (zanrepo, commit_node,
280 '{author|nonempty}\n{date(date, \'%A %d %B %Y %T\')}').split('\n') 251 '{author|nonempty}\n{date(date, \'%A %d %B %Y %T\')}').split('\n')
281 252
282 if len (moredata) != 2: 253 if len (moredata) != 2:
283 chanlog ('error while processing %s: malformed hg data' % commit_node) 254 Irc.broadcast ('error while processing %s: malformed hg data' % commit_node)
284 continue 255 continue
285 #fi 256
286
287 commit_author = moredata[0] 257 commit_author = moredata[0]
288 commit_date = moredata[1] 258 commit_date = moredata[1]
289 commit_email = "" 259 commit_email = ""
290 260
291 try: 261 try:
292 ticket_data = suds_client.service.mc_issue_get (btuser, btpassword, ticket_id) 262 ticket_data = Bt.get_issue (ticket_id)
293 except Exception as e: 263 except Exception as e:
294 chanlog ('error while processing %s: %s' % (commit_node, `e`)) 264 Irc.broadcast ('error while processing %s: %s' % (commit_node, `e`))
295 continue 265 continue
296 #tried 266
297
298 # Remove the email address from the author if possible 267 # Remove the email address from the author if possible
299 rex = re.compile (r'^(.+) <([^>]+)>$.*') 268 rex = re.compile (r'^(.+) <([^>]+)>$.*')
300 match = rex.match (commit_author) 269 match = rex.match (commit_author)
301 if match: 270 if match:
302 commit_author = match.group (1) 271 commit_author = match.group (1)
303 commit_email = match.group (2) 272 commit_email = match.group (2)
304 #fi 273
305
306 commit_diffstat = zanrepo.hg_command ('diff', '--change', commit_node, '--stat') 274 commit_diffstat = zanrepo.hg_command ('diff', '--change', commit_node, '--stat')
307 275
308 if len(commit_diffstat) > 0: 276 if len(commit_diffstat) > 0:
309 # commit_diffstat = 'Changes in files:\n[code]\n' + commit_diffstat + '\n[/code]' 277 # commit_diffstat = 'Changes in files:\n[code]\n' + commit_diffstat + '\n[/code]'
310 commit_diffstat = 'Changes in files:\n' + bbcodify(commit_diffstat) 278 commit_diffstat = 'Changes in files:\n' + bbcodify(commit_diffstat)
311 else: 279 else:
312 commit_diffstat = 'No changes in files.' 280 commit_diffstat = 'No changes in files.'
313 281
314 # Compare the email addresses against known developer usernames 282 # Compare the email addresses against known developer usernames
315 commit_trackeruser = find_developer_by_email (commit_email) 283 commit_trackeruser = find_developer_by_email (commit_email)
316 284
317 if commit_trackeruser != '': 285 if commit_trackeruser != '':
318 commit_author += ' [%s]' % commit_trackeruser 286 commit_author += ' [%s]' % commit_trackeruser
319 #fi 287
320
321 message = 'Issue addressed by commit %s: [b][url=%s/commits/%s]%s[/url][/b]' \ 288 message = 'Issue addressed by commit %s: [b][url=%s/commits/%s]%s[/url][/b]' \
322 % (commit_node, repo_url, commit_node, commit_message) 289 % (commit_node, repo_url, commit_node, commit_message)
323 message += "\nCommitted by %s on %s\n\n%s" \ 290 message += "\nCommitted by %s on %s\n\n%s" \
324 % (commit_author, commit_date, commit_diffstat) 291 % (commit_author, commit_date, commit_diffstat)
325 292
326 need_update = False 293 need_update = False
327 294
328 # If not already set, set handler 295 # If not already set, set handler
329 if not 'handler' in ticket_data: 296 if not 'handler' in ticket_data:
330 ticket_data['handler'] = {'name': commit_trackeruser} 297 ticket_data['handler'] = {'name': commit_trackeruser}
331 need_update = True 298 need_update = True
332 #fi 299
333
334 # Find out the status level of the ticket 300 # Find out the status level of the ticket
335 needs_testing_level = 70 301 needs_testing_level = 70
336 302
337 if ticket_data['status']['id'] < needs_testing_level: 303 if ticket_data['status']['id'] < needs_testing_level:
338 ticket_data.status['id'] = needs_testing_level 304 ticket_data.status['id'] = needs_testing_level
339 need_update = True 305 need_update = True
340 #fi 306
341
342 # Set target version if not set 307 # Set target version if not set
343 if not 'target_version' in ticket_data: 308 if not 'target_version' in ticket_data:
344 ticket_data['target_version'] = '1.4' if repo_name == 'zandronum-stable' else '2.0' 309 ticket_data['target_version'] = '1.4' if repo_name == 'zandronum-stable' else '2.0'
345 need_update = True 310 need_update = True
346 elif (ticket_data['target_version'] == '2.0' or ticket_data['target_version'] == '2.0-beta') \ 311 elif (ticket_data['target_version'] == '2.0' or ticket_data['target_version'] == '2.0-beta') \
350 need_update = True 315 need_update = True
351 elif ticket_data['target_version'] == '2.0-beta': 316 elif ticket_data['target_version'] == '2.0-beta':
352 # Fix target version from 2.0-beta to 2.0 317 # Fix target version from 2.0-beta to 2.0
353 ticket_data['target_version'] = '2.0' 318 ticket_data['target_version'] = '2.0'
354 need_update = True 319 need_update = True
355 #fi 320
356
357 # Announce on IRC 321 # Announce on IRC
358 for irc_client in g_clients: 322 for irc_client in Irc.all_clients:
359 for channel in irc_client.channels: 323 for channel in irc_client.channels:
360 if channel.get_value ('btannounce', default=True): 324 if channel.get_value ('btannounce', default=True):
361 irc_client.privmsg (channel.get_value ('name'), 325 irc_client.privmsg (channel.get_value ('name'),
362 "%s: commit %s fixes issue %d: %s" 326 "%s: commit %s fixes issue %d: %s"
363 % (repo_name, commit_node, ticket_id, commit_message)) 327 % (repo_name, commit_node, ticket_id, commit_message))
364 irc_client.privmsg (channel.get_value ('name'), 328 irc_client.privmsg (channel.get_value ('name'),
365 "Read all about it here: " + irc_client.get_ticket_url (ticket_id)) 329 "Read all about it here: " + Bt.get_ticket_url (ticket_id))
366 #fi 330
367 #done
368 #done
369
370 if need_update: 331 if need_update:
371 # We need to remove the note data, otherwise the ticket notes 332 # We need to remove the note data, otherwise the ticket notes
372 # will get unnecessary updates. WTF, MantisBT? 333 # will get unnecessary updates. WTF, MantisBT?
373 ticket_data.notes = [] 334 ticket_data.notes = []
374 suds_client.service.mc_issue_update (btuser, btpassword, ticket_id, ticket_data) 335 Bt.update_issue (ticket_id, ticket_data)
375 #fi 336
376 337 Bt.post_note (ticket_id, message)
377 suds_client.service.mc_issue_note_add (btuser, btpassword, ticket_id, { 'text': message })
378 num_commits += 1 338 num_commits += 1
379 except Exception as e: 339 except Exception as e:
380 chanlog ('Error while processing %s: %s' % (commit_node, `e`)) 340 Irc.broadcast ('Error while processing %s: %s' % (commit_node, e))
381 continue 341 continue
382 #tried
383 #done
384 #enddef
385 342
386 def force_poll(): 343 def force_poll():
344 global repocheck_timeout
387 repocheck_timeout = 0 345 repocheck_timeout = 0
388 poll() 346 poll()

mercurial