1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
8 if sys.version_info[0] == 2:
11 from io import StringIO
33 from bqueue import B_Queue
34 from config import config, init_conf
38 if r1.kind != 'group' or r2.kind != 'group':
39 raise Exception("non-group requests")
40 pri_diff = cmp(r1.priority, r2.priority)
42 return cmp(r1.time, r2.time)
45 q.requests.sort(key=mycmp)
47 q.requests = q.requests[1:]
50 def store_binary_request(r):
53 if not b.build_failed: new_b.append(b)
57 # store new queue and max_req_no for binary builders
58 num = int(open(path.max_req_no_file, "r").read().strip()) + 1
61 q = B_Queue(path.req_queue_file)
66 q.dump(path.queue_stats_file)
67 q.dump_html(path.queue_html_stats_file)
68 q.write_signed(path.req_queue_signed_file)
71 (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(path.max_req_no_file))
72 cnt_f = os.fdopen(fdno, "w")
74 cnt_f.write("%d\n" % num)
76 os.fsync(cnt_f.fileno())
78 os.chmod(tmpfname, 0o0644)
79 os.rename(tmpfname, path.max_req_no_file)
81 def transfer_file(r, b):
82 local = path.srpms_dir + '/' + r.id + "/" + b.src_rpm
84 # export files from chroot
85 chroot.cp(f, outfile = local, rm = True)
86 os.chmod(local, 0o0644)
89 if config.gen_upinfo and 'test-build' not in r.flags:
90 fname = path.srpms_dir + '/' + r.id + "/" + b.src_rpm + ".uploadinfo"
92 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))
94 ftp.add(fname, "uploadinfo")
97 if len(b.spec) <= len('.spec'):
98 # should not really get here
99 util.append_to(b.logfile, "error: No .spec given but build src.rpm wanted")
102 status.push("building %s" % b.spec)
103 # messagebus.notify(topic="build_srpm.start", spec=b.spec, flags=r.flags, batch=b, request=r)
106 builder_opts = "-nu -nm --nodeps --http --define \'_tld_builder 1\'"
107 cmd = ("cd rpm/packages; nice -n %s ./builder %s -bs %s -r %s %s %s %s 2>&1" %
108 (config.nice, builder_opts, b.bconds_string(), b.branch,
109 b.kernel_string(), b.defines_string(), b.spec))
110 util.append_to(b.logfile, "request from: %s" % r.requester)
111 util.append_to(b.logfile, "started at: %s" % time.asctime())
112 util.append_to(b.logfile, "building SRPM using: %s\n" % cmd)
113 res = chroot.run(cmd, logfile = b.logfile)
114 util.append_to(b.logfile, "exit status %d" % res)
115 files = util.collect_files(b.logfile)
118 util.append_to(b.logfile, "error: More than one file produced: %s" % files)
119 res = "FAIL_TOOMANYFILES"
120 last = files[len(files) - 1]
121 b.src_rpm_file = last
122 b.src_rpm = os.path.basename(last)
123 r.chroot_files.extend(files)
125 util.append_to(b.logfile, "error: No files produced.")
127 if res == 0 and not "test-build" in r.flags:
128 util.append_to(b.logfile, "Writing package revision")
129 res = chroot.run("cd rpm/packages; ./builder -bs %s -r %s --pkgrev %s %s" % \
130 (b.bconds_string(), b.branch, b.defines_string(), b.spec), logfile = b.logfile)
134 packagename = b.spec[:-5]
135 packagedir = "rpm/packages/%s" % packagename
136 chroot.run("rpm/packages/builder -m %s" % \
137 (b.spec,), logfile = b.logfile)
138 chroot.run("rm -rf %s" % packagedir, logfile = b.logfile)
144 # messagebus.notify(topic="build_srpm.finish", spec=b.spec)
147 def handle_request(r):
148 os.mkdir(path.srpms_dir + '/' + r.id)
149 os.chmod(path.srpms_dir + '/' + r.id, 0o0755)
152 build.build_all(r, build_srpm)
153 report.send_report(r, is_src = True)
154 report.send_cia_report(r, is_src = True)
155 store_binary_request(r)
161 if lock("building-srpm", non_block = 1) == None:
164 status.push("srpm: processing queue")
165 q = B_Queue(path.queue_file)
178 status.push("srpm: handling request from %s" % r.requester)
182 if __name__ == '__main__':