]>
Commit | Line | Data |
---|---|---|
dfff8bd5 MM |
1 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et |
2 | ||
3fefb769 MM |
3 | import string |
4 | import os | |
5 | import time | |
6 | ||
7 | import path | |
07e220e1 | 8 | import sys |
3fefb769 MM |
9 | import log |
10 | import status | |
11 | import lock | |
3f446d8f | 12 | import loop |
07e220e1 MM |
13 | |
14 | import rpm_builder | |
15 | ||
3fefb769 MM |
16 | from config import config, init_conf |
17 | ||
18 | # return list of binary builders in fair-queue order | |
19 | # it is determined based upon spool/got_lock file, which is also | |
20 | # updated to be short | |
21 | def builders_order(): | |
dfff8bd5 MM |
22 | bs = {} |
23 | bl = [] | |
24 | for b in config.binary_builders: | |
25 | bs[b] = 0 | |
26 | bl.append(b) | |
e6376553 | 27 | |
dfff8bd5 MM |
28 | lck = lock.lock("got-lock") |
29 | f = open(path.got_lock_file, "r+") | |
30 | line_no = 0 | |
e6376553 | 31 | |
dfff8bd5 MM |
32 | for l in f.xreadlines(): |
33 | line_no += 1 | |
34 | b = string.strip(l) | |
35 | if bs.has_key(b): | |
36 | bs[b] = line_no | |
37 | else: | |
38 | log.alert("found strange lock in got-lock: %s" % b) | |
3fefb769 | 39 | |
dfff8bd5 MM |
40 | def mycmp(b1, b2): |
41 | return cmp(bs[b1], bs[b2]) | |
e6376553 | 42 | |
dfff8bd5 | 43 | bl.sort(mycmp) |
3fefb769 | 44 | |
dfff8bd5 MM |
45 | f.seek(0) |
46 | f.truncate(0) | |
47 | for l in bl: f.write(l + "\n") | |
48 | f.close() | |
49 | lck.close() | |
3fefb769 | 50 | |
dfff8bd5 | 51 | return bl |
3fefb769 MM |
52 | |
53 | def run_rpm_builder(b): | |
dfff8bd5 MM |
54 | if os.fork() == 0: |
55 | return | |
56 | else: | |
57 | rpm_builder.main_for(b) | |
58 | sys.exit(0) | |
3fefb769 MM |
59 | |
60 | def main(): | |
032526d0 | 61 | init_conf() |
dfff8bd5 MM |
62 | for b in builders_order(): |
63 | run_rpm_builder(b) | |
64 | # give builder some time to aquire lock | |
65 | time.sleep(1) | |
66 | # wait for children to die out | |
67 | try: | |
68 | while 1: os.wait() | |
69 | except: | |
70 | pass | |
3fefb769 | 71 | |
e8ee9db8 | 72 | if __name__ == '__main__': |
dfff8bd5 | 73 | loop.run_loop(main) |