146
146
status_file = "%s/merges/%s-manual.html" % (ROOT, component)
147
147
with open(status_file + ".new", "w") as status:
148
print >>status, "<html>"
150
print >>status, "<head>"
151
print >>status, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
152
print >>status, "<title>Ubuntu Merge-o-Matic: %s manual</title>" \
154
print >>status, "<style>"
155
print >>status, "img#ubuntu {"
156
print >>status, " border: 0;"
158
print >>status, "h1 {"
159
print >>status, " padding-top: 0.5em;"
160
print >>status, " font-family: sans-serif;"
161
print >>status, " font-size: 2.0em;"
162
print >>status, " font-weight: bold;"
164
print >>status, "h2 {"
165
print >>status, " padding-top: 0.5em;"
166
print >>status, " font-family: sans-serif;"
167
print >>status, " font-size: 1.5em;"
168
print >>status, " font-weight: bold;"
170
print >>status, "p, td {"
171
print >>status, " font-family: sans-serif;"
172
print >>status, " margin-bottom: 0;"
174
print >>status, "li {"
175
print >>status, " font-family: sans-serif;"
176
print >>status, " margin-bottom: 1em;"
178
print >>status, "tr.first td {"
179
print >>status, " border-top: 2px solid white;"
181
print >>status, "</style>"
182
print >>status, "<% from momlib import * %>"
183
print >>status, "</head>"
184
print >>status, "<body>"
185
print >>status, "<img src=\".img/ubuntulogo-100.png\" id=\"ubuntu\">"
186
print >>status, "<h1>Ubuntu Merge-o-Matic: %s manual</h1>" % component
188
for section in SECTIONS:
189
section_merges = [ m for m in merges if m[0] == section ]
190
print >>status, ("<p><a href=\"#%s\">%s %s merges</a></p>"
191
% (section, len(section_merges), section))
193
print >>status, "<% comment = get_comments() %>"
195
for section in SECTIONS:
196
section_merges = [ m for m in merges if m[0] == section ]
198
print >>status, ("<h2 id=\"%s\">%s Merges</h2>"
199
% (section, section.title()))
148
print("<html>", file=status)
150
print("<head>", file=status)
151
print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">", file=status)
152
print("<title>Ubuntu Merge-o-Matic: %s manual</title>" % component,
154
print("<style>", file=status)
155
print("img#ubuntu {", file=status)
156
print(" border: 0;", file=status)
157
print("}", file=status)
158
print("h1 {", file=status)
159
print(" padding-top: 0.5em;", file=status)
160
print(" font-family: sans-serif;", file=status)
161
print(" font-size: 2.0em;", file=status)
162
print(" font-weight: bold;", file=status)
163
print("}", file=status)
164
print("h2 {", file=status)
165
print(" padding-top: 0.5em;", file=status)
166
print(" font-family: sans-serif;", file=status)
167
print(" font-size: 1.5em;", file=status)
168
print(" font-weight: bold;", file=status)
169
print("}", file=status)
170
print("p, td {", file=status)
171
print(" font-family: sans-serif;", file=status)
172
print(" margin-bottom: 0;", file=status)
173
print("}", file=status)
174
print("li {", file=status)
175
print(" font-family: sans-serif;", file=status)
176
print(" margin-bottom: 1em;", file=status)
177
print("}", file=status)
178
print("tr.first td {", file=status)
179
print(" border-top: 2px solid white;", file=status)
180
print("}", file=status)
181
print("</style>", file=status)
182
print("<% from momlib import * %>", file=status)
183
print("</head>", file=status)
184
print("<body>", file=status)
185
print("<img src=\".img/ubuntulogo-100.png\" id=\"ubuntu\">",
187
print("<h1>Ubuntu Merge-o-Matic: %s manual</h1>" % component,
190
for section in SECTIONS:
191
section_merges = [ m for m in merges if m[0] == section ]
192
print("<p><a href=\"#%s\">%s %s merges</a></p>" %
193
(section, len(section_merges), section), file=status)
195
print("<% comment = get_comments() %>", file=status)
197
for section in SECTIONS:
198
section_merges = [ m for m in merges if m[0] == section ]
200
print("<h2 id=\"%s\">%s Merges</h2>" % (section, section.title()),
201
203
do_table(status, section_merges, left_distro, right_distro, component)
203
print >>status, "</body>"
204
print >>status, "</html>"
205
print("</body>", file=status)
206
print("</html>", file=status)
206
208
os.rename(status_file + ".new", status_file)
228
230
def do_table(status, merges, left_distro, right_distro, component):
229
231
"""Output a table."""
230
print >>status, "<table cellspacing=0>"
231
print >>status, "<tr bgcolor=#d0d0d0>"
232
print >>status, "<td rowspan=2><b>Package</b></td>"
233
print >>status, "<td colspan=2><b>Last Uploader</b></td>"
234
print >>status, "<td rowspan=2><b>Comment</b></td>"
235
print >>status, "<td rowspan=2><b>Bug</b></td>"
236
print >>status, "</tr>"
237
print >>status, "<tr bgcolor=#d0d0d0>"
238
print >>status, "<td><b>%s Version</b></td>" % left_distro.title()
239
print >>status, "<td><b>%s Version</b></td>" % right_distro.title()
240
print >>status, "</tr>"
232
print("<table cellspacing=0>", file=status)
233
print("<tr bgcolor=#d0d0d0>", file=status)
234
print("<td rowspan=2><b>Package</b></td>", file=status)
235
print("<td colspan=2><b>Last Uploader</b></td>", file=status)
236
print("<td rowspan=2><b>Comment</b></td>", file=status)
237
print("<td rowspan=2><b>Bug</b></td>", file=status)
238
print("</tr>", file=status)
239
print("<tr bgcolor=#d0d0d0>", file=status)
240
print("<td><b>%s Version</b></td>" % left_distro.title(), file=status)
241
print("<td><b>%s Version</b></td>" % right_distro.title(), file=status)
242
print("</tr>", file=status)
242
244
for uploaded, priority, package, user, uploader, source, \
243
245
left_version, right_version in merges:
265
print >>status, "<tr bgcolor=%s class=first>" % COLOURS[priority]
266
print >>status, "<td><tt><a href=\"https://patches.ubuntu.com/" \
267
print("<tr bgcolor=%s class=first>" % COLOURS[priority], file=status)
268
print("<td><tt><a href=\"https://patches.ubuntu.com/" \
267
269
"%s/%s/%s_%s.patch\">%s</a></tt>" \
268
% (pathhash(package), package, package, left_version, package)
269
print >>status, " <sup><a href=\"https://launchpad.net/ubuntu/" \
270
"+source/%s\">LP</a></sup>" % package
271
print >>status, " <sup><a href=\"http://packages.qa.debian.org/" \
272
"%s\">PTS</a></sup></td>" % package
273
print >>status, "<td colspan=2>%s</td>" % who
274
print >>status, "<td rowspan=2><form method=\"get\" action=\"addcomment.py\"><br />"
275
print >>status, "<input type=\"hidden\" name=\"component\" value=\"%s-manual\" />" % component
276
print >>status, "<input type=\"hidden\" name=\"package\" value=\"%s\" />" % package
277
print >>status, "<%%\n\
270
% (pathhash(package), package, package, left_version, package),
272
print(" <sup><a href=\"https://launchpad.net/ubuntu/" \
273
"+source/%s\">LP</a></sup>" % package, file=status)
274
print(" <sup><a href=\"http://packages.qa.debian.org/" \
275
"%s\">PTS</a></sup></td>" % package, file=status)
276
print("<td colspan=2>%s</td>" % who, file=status)
277
print("<td rowspan=2><form method=\"get\" action=\"addcomment.py\"><br />",
279
print("<input type=\"hidden\" name=\"component\" value=\"%s-manual\" />" % component,
281
print("<input type=\"hidden\" name=\"package\" value=\"%s\" />" % package,
278
284
the_comment = \"\"\n\
279
285
if \"%s\" in comment:\n\
280
286
the_comment = comment[\"%s\"]\n\
281
287
req.write(\"<input type=\\\"text\\\" style=\\\"border-style: none; background-color: %s\\\" name=\\\"comment\\\" value=\\\"%%s\\\" title=\\\"%%s\\\" />\" %% (the_comment, the_comment))\n\
282
%%>" % (package, package, COLOURS[priority])
283
print >>status, "</form></td>"
284
print >>status, "<td rowspan=2>"
285
print >>status, "<%%\n\
288
%%>" % (package, package, COLOURS[priority]), file=status)
289
print("</form></td>", file=status)
290
print("<td rowspan=2>", file=status)
286
292
if \"%s\" in comment:\n\
287
293
req.write(\"%%s\" %% gen_buglink_from_comment(comment[\"%s\"]))\n\
289
295
req.write(\" \")\n\
291
%%>" % (package, package)
292
print >>status, "</td>"
293
print >>status, "</tr>"
294
print >>status, "<tr bgcolor=%s>" % COLOURS[priority]
295
print >>status, "<td><small>%s</small></td>" % source["Binary"]
296
print >>status, "<td>%s</td>" % left_version
297
print >>status, "<td>%s</td>" % right_version
298
print >>status, "</tr>"
297
%%>" % (package, package), file=status)
298
print("</td>", file=status)
299
print("</tr>", file=status)
300
print("<tr bgcolor=%s>" % COLOURS[priority], file=status)
301
print("<td><small>%s</small></td>" % source["Binary"], file=status)
302
print("<td>%s</td>" % left_version, file=status)
303
print("<td>%s</td>" % right_version, file=status)
304
print("</tr>", file=status)
300
print >>status, "</table>"
306
print("</table>", file=status)
303
309
def write_status_json(component, merges, left_distro, right_distro):
306
312
with open(status_file + ".new", "w") as status:
307
313
# No json module available on merges.ubuntu.com right now, but it's
308
314
# not that hard to do it ourselves.
315
print('[', file=status)
311
317
for uploaded, priority, package, user, uploader, source, \
312
318
left_version, right_version in merges:
313
print >>status, ' {',
319
print(' {', end=' ', file=status)
314
320
# source_package, short_description, and link are for
315
321
# Harvest (http://daniel.holba.ch/blog/?p=838).
316
print >>status, '"source_package": "%s",' % package,
317
print >>status, '"short_description": "merge %s",' % right_version,
318
print >>status, '"link": "https://merges.ubuntu.com/%s/%s/",' % (pathhash(package), package),
319
print >>status, '"uploaded": "%s",' % uploaded,
320
print >>status, '"priority": "%s",' % priority,
322
print('"source_package": "%s",' % package, end=' ', file=status)
323
print('"short_description": "merge %s",' % right_version,
324
end=' ', file=status)
325
print('"link": "https://merges.ubuntu.com/%s/%s/",' %
326
(pathhash(package), package), end=' ', file=status)
327
print('"uploaded": "%s",' % uploaded, end=' ', file=status)
328
print('"priority": "%s",' % priority, end=' ', file=status)
321
329
if user is not None:
323
331
who = who.replace('\\', '\\\\')
324
332
who = who.replace('"', '\\"')
325
print >>status, '"user": "%s",' % who,
333
print('"user": "%s",' % who, end=' ', file=status)
326
334
if uploader is not None:
327
335
(usr_name, usr_mail) = parseaddr(user)
328
336
(upl_name, upl_mail) = parseaddr(uploader)
331
339
u_who = u_who.replace('\\', '\\\\')
332
340
u_who = u_who.replace('"', '\\"')
333
print >>status, '"uploader": "%s",' % u_who,
341
print('"uploader": "%s",' % u_who, end=' ', file=status)
334
342
binaries = re.split(', *', source["Binary"].replace('\n', ''))
335
print >>status, '"binaries": [ %s ],' % \
336
', '.join(['"%s"' % b for b in binaries]),
337
print >>status, '"left_version": "%s",' % left_version,
338
print >>status, '"right_version": "%s"' % right_version,
343
print('"binaries": [ %s ],' %
344
', '.join(['"%s"' % b for b in binaries]),
345
end=' ', file=status)
346
print('"left_version": "%s",' % left_version, end=' ', file=status)
347
print('"right_version": "%s"' % right_version,
348
end=' ', file=status)
340
350
if cur_merge < len(merges):
351
print('},', file=status)
353
print('}', file=status)
354
print(']', file=status)
346
356
os.rename(status_file + ".new", status_file)