--- /dev/null
+# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
+
+import string
+import fnmatch
+import os
+import stat
+import re
+
+import path
+import log
+import status
+from mailer import Message
+from config import config
+
+class Blacklist_File:
+ def __init__(self):
+ self.reload()
+
+ def try_reload(self):
+ mtime = os.stat(path.blacklist_file)[stat.ST_MTIME]
+ if mtime != self.blacklist_file_mtime:
+ log.notice("blacklist file has changed, reloading...")
+ self.reload()
+ return True
+ return False
+
+ def reload(self):
+ self.blacklist_file_mtime = os.stat(path.blacklist_file)[stat.ST_MTIME]
+ self.blacklist = set()
+ status.push("reading package-blacklist")
+ f = open(path.blacklist_file)
+ for l in f:
+ p = l.rstrip()
+ if re.match(r"^#.*", p):
+ continue
+ self.blacklist.add(p)
+ log.notice("blacklist added: %s" % l)
+ f.close()
+ status.pop()
+
+ def package(self, p):
+# log.notice("blacklist check: %s (%d)" % (p, self.blacklist.has_key(p)))
+ if p in self.blacklist:
+ return True
+ return False
+
+ def packages(self):
+ return self.blacklist
+
+blacklist = Blacklist_File()
--- /dev/null
+jQuery(function($) {
+ update_tz();
+ filter_requesters();
+
+ // setup relative time display
+ function update_tz() {
+ $('time.timeago').timeago();
+ }
+
+ // draw filter for requesters
+ function filter_requesters() {
+ var requesters = ['everyone'];
+ $('div b.requester').each(function(i, d) {
+ var requester = $(d).text();
+ if (!~requesters.indexOf(requester)) {
+ requesters.push(requester);
+ }
+ });
+
+ var $filter = $('#requesters-filter');
+ if ($filter.length == 0) {
+ $filter = $('<div id=requesters-filter>Filter by requesters:<br></div>');
+ $('body').prepend($filter);
+ }
+ requesters.forEach(function(r) {
+ var $button = $('<button class=request-filter>'+ r + '</button>');
+ $button.on('click', function() {
+ $('div#requesters-filter button').removeAttr('disabled');
+ $('div.request').filter(function(i, d) {
+ var c = $(d).find('b.requester').text();
+ if (c == r || r == 'everyone') {
+ $(d).show();
+ $button.attr('disabled', 'disabled');
+ } else {
+ $(d).hide();
+ }
+ })
+ })
+ $filter.append($button);
+ });
+ }
+});
--- /dev/null
+/*
+ * css from www.pld-linux.org (moinmoin) wiki theme, using css usage firebug plugin to cleanup
+ */
+html {
+ background-color: white;
+ color: #5e5e5e;
+ font-family: Tahoma, Arial, Lucida Grande, sans-serif;
+ font-size: 0.75em;
+ line-height: 1.25em;
+}
+
+a {
+ text-decoration: underline;
+ color: #006;
+}
+
+a:hover {
+ color: #006;
+}
+
+pre {
+ background: #FFF8EB;
+ border: 1pt solid #FFE2AB;
+ font-family: courier, monospace;
+ padding: 0.5em;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+@media screen, projection {
+ html {
+ background-color: #f3efe3;
+ }
+
+ body {
+ position: relative;
+ }
+
+ div.request {
+ background-color: white;
+ margin: 10px 0px;
+ padding: 2px;
+ }
+ div > a {
+ font-weight: bold;
+ color: #5e5e5e;
+ }
+ div > a:hover {
+ color: #5e5e5e;
+ }
+ div.upgrade {
+ background-color: #e4f1cf;
+ }
+ div:target {
+ background-color: #ffffcc;
+ color: black;
+ }
+
+ #header {
+ background-color: white;
+ border: 1px solid black;
+ padding: 0.5em;
+ position: fixed;
+ right: 0px;
+ bottom: 0px;
+ z-index: 100;
+ }
+
+ #content {
+ clear: both;
+ overflow: auto;
+ position: absolute;
+ width: 100%;
+ }
+}
+@media print {
+ a {
+ background-color: inherit;
+ color: inherit;
+ }
+ #header {
+ display: none;
+ }
+}
+
+@media projection {
+ html { line-height: 1.8em; }
+ body, b, a, p { font-size: 22pt; }
+}
--- /dev/null
+# define chroots whose /proc to mount on startup
+
+#CHROOTS=/srv/builders/tld/th/{i686,x86_64}