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