--- /dev/null
+# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
+
+import path
+import time
+import os
+import re
+import log
+
+from config import config
+import util
+
+class Buildlogs_Queue:
+ def __init__(self):
+ self.queue = []
+ self.some_failed = 0
+ self.requester_email = None
+
+ def init(self, g):
+ self.requester_email = g.requester_email
+
+ def add(self, logfile, failed, id):
+ # if /dev/null, don't even bother to store it
+ if config.buildlogs_url == "/dev/null":
+ return
+ blogfile = os.path.basename(logfile)
+ name = re.sub(r"\.spec\.log", "", blogfile) + "," + id + ".bz2"
+ ret = os.system("bzip2 --best --force < %s > %s" \
+ % (logfile, path.buildlogs_queue_dir + '/' + config.builder + '.' + id + '.' + blogfile))
+ if ret:
+ log.error("bzip2 compression of %s failed; does bzip2 binary exist?" % (logfile))
+
+ if failed: s = "FAIL"
+ else: s = "OK"
+ f = open(path.buildlogs_queue_dir + '/' + config.builder + '.' + id + '.' + blogfile + ".info", "w")
+ f.write("Status: %s\nEND\n" % s)
+ f.close()
+
+ self.queue.append({'name': name, 'id': config.builder + '.' + id + '.' + blogfile, 'failed': failed})
+
+ def flush(self):
+ def desc(l):
+ return """Target: %s/%s
+Builder: %s
+Time: %d
+Type: buildlog
+Requester: %s
+END
+""" % (config.buildlogs_url, l['name'], config.builder, time.time(), self.requester_email)
+
+ q = self.queue[:]
+ for l in q:
+ f = open(path.buildlogs_queue_dir + '/' + l['id'] + ".desc.tmp", "w")
+ f.write(desc(l))
+ f.close()
+ os.rename(path.buildlogs_queue_dir + '/' + l['id'] + ".desc.tmp", path.buildlogs_queue_dir + '/' + l['id'] + ".desc")
+ self.queue.remove(l)
+
+queue = Buildlogs_Queue()
+
+def init(r):
+ queue.init(r)
+
+def add(logfile, failed, id):
+ "Add new buildlog with specified status."
+ queue.add(logfile, failed, id)
+
+def flush():
+ "Send buildlogs to server."
+ queue.flush()