X-Git-Url: https://git.tld-linux.org/?p=TLD.git;a=blobdiff_plain;f=pld-builder.new%2FPLD_Builder%2Fsrpm_builder.py;fp=pld-builder.new%2FPLD_Builder%2Fsrpm_builder.py;h=0000000000000000000000000000000000000000;hp=5762711e7ae31167320f208bbf7833ba034bfb57;hb=3dc53b6865f716904ad4d02e934e04b3d4855c32;hpb=b235722fd546915a60800f2660d76f684d6f1445 diff --git a/pld-builder.new/PLD_Builder/srpm_builder.py b/pld-builder.new/PLD_Builder/srpm_builder.py deleted file mode 100644 index 5762711..0000000 --- a/pld-builder.new/PLD_Builder/srpm_builder.py +++ /dev/null @@ -1,181 +0,0 @@ -# vi: encoding=utf-8 ts=8 sts=4 sw=4 et - -import email -import string -import time -import os -import StringIO -import sys -import re -import shutil -import atexit -import tempfile - -import gpg -import request -import log -import path -import util -import loop -import chroot -import ftp -import buildlogs -import notify -import status -import build -import report - -from lock import lock -from bqueue import B_Queue -from config import config, init_conf - -def pick_request(q): - def mycmp(r1, r2): - if r1.kind != 'group' or r2.kind != 'group': - raise Exception, "non-group requests" - pri_diff = cmp(r1.priority, r2.priority) - if pri_diff == 0: - return cmp(r1.time, r2.time) - else: - return pri_diff - q.requests.sort(mycmp) - ret = q.requests[0] - q.requests = q.requests[1:] - return ret - -def store_binary_request(r): - new_b = [] - for b in r.batches: - if not b.build_failed: new_b.append(b) - if new_b == []: - return - r.batches = new_b - # store new queue and max_req_no for binary builders - num = int(string.strip(open(path.max_req_no_file, "r").read())) + 1 - - r.no = num - q = B_Queue(path.req_queue_file) - q.lock(0) - q.read() - q.add(r) - q.write() - q.dump(path.queue_stats_file) - q.dump_html(path.queue_html_stats_file) - q.write_signed(path.req_queue_signed_file) - q.unlock() - - (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(path.max_req_no_file)) - cnt_f = os.fdopen(fdno, "w") - cnt_f.seek(0) - cnt_f.write("%d\n" % num) - cnt_f.flush() - os.fsync(cnt_f.fileno()) - cnt_f.close() - os.chmod(tmpfname, 0644) - os.rename(tmpfname, path.max_req_no_file) - -def transfer_file(r, b): - local = path.srpms_dir + '/' + r.id + "/" + b.src_rpm - f = b.src_rpm_file - # export files from chroot - chroot.cp(f, outfile = local, rm = True) - os.chmod(local, 0644) - ftp.add(local) - - if config.gen_upinfo and 'test-build' not in r.flags: - fname = path.srpms_dir + '/' + r.id + "/" + b.src_rpm + ".uploadinfo" - f = open(fname, "w") - f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\nfile:SRPMS:%s\nEND\n" % (b.gb_id, b.requester, b.gb_id, b.requester_email, b.src_rpm)) - f.close() - ftp.add(fname, "uploadinfo") - -def build_srpm(r, b): - if len(b.spec) == 0: - # should not really get here - util.append_to(b.logfile, "error: No .spec given but build src.rpm wanted") - return "FAIL" - - status.push("building %s" % b.spec) - - b.src_rpm = "" - builder_opts = "-nu -nm --nodeps --http" - if ("test-build" in r.flags) or b.branch and b.branch.startswith(config.tag_prefixes[0]): - tag_test="" - else: - tag_test=" -Tp %s -tt" % (config.tag_prefixes[0],) - cmd = ("cd rpm/packages; nice -n %s ./builder %s -bs %s -r %s %s %s %s 2>&1" % - (config.nice, builder_opts, b.bconds_string(), b.branch, - tag_test, b.kernel_string(), b.spec)) - util.append_to(b.logfile, "request from: %s" % r.requester) - util.append_to(b.logfile, "started at: %s" % time.asctime()) - util.append_to(b.logfile, "building SRPM using: %s\n" % cmd) - res = chroot.run(cmd, logfile = b.logfile) - util.append_to(b.logfile, "exit status %d" % res) - files = util.collect_files(b.logfile) - if len(files) > 0: - if len(files) > 1: - util.append_to(b.logfile, "error: More than one file produced: %s" % files) - res = "FAIL_TOOMANYFILES" - last = files[len(files) - 1] - b.src_rpm_file = last - b.src_rpm = os.path.basename(last) - r.chroot_files.extend(files) - else: - util.append_to(b.logfile, "error: No files produced.") - res = "FAIL" - if res == 0 and not "test-build" in r.flags: - for pref in config.tag_prefixes: - util.append_to(b.logfile, "Tagging with prefix: %s" % pref) - res = chroot.run("cd rpm/packages; ./builder -r %s -Tp %s -Tv %s" % \ - (b.branch, pref, b.spec), logfile = b.logfile) - if res == 0: - transfer_file(r, b) - - packagedir = "rpm/packages/%s" % b.spec[:-5] - packagename = b.spec[:-5] - chroot.run("rpm/packages/builder -m %s" % \ - (b.spec,), logfile = b.logfile) - chroot.run("rm -rf %s" % packagedir, logfile = b.logfile) - status.pop() - - if res: - res = "FAIL" - return res - -def handle_request(r): - os.mkdir(path.srpms_dir + '/' + r.id) - os.chmod(path.srpms_dir + '/' + r.id, 0755) - ftp.init(r) - buildlogs.init(r) - build.build_all(r, build_srpm) - report.send_report(r, is_src = True) - report.send_cia_report(r, is_src = True) - store_binary_request(r) - ftp.flush() - notify.send(r) - -def main(): - init_conf("src") - if lock("building-srpm", non_block = 1) == None: - return - while True: - status.push("srpm: processing queue") - q = B_Queue(path.queue_file) - if not q.lock(1): - status.pop() - return - q.read() - if q.requests == []: - q.unlock() - status.pop() - return - r = pick_request(q) - q.write() - q.unlock() - status.pop() - status.push("srpm: handling request from %s" % r.requester) - handle_request(r) - status.pop() - -if __name__ == '__main__': - loop.run_loop(main)