]>
Commit | Line | Data |
---|---|---|
514f66ab MM |
1 | #!/usr/bin/env python |
2 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et | |
3 | ||
6ebc8df7 | 4 | import sys, os |
2f949c90 | 5 | sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules') |
f053c9e6 | 6 | import ftptree |
6ebc8df7 | 7 | from common import checkdir |
5959a5e8 | 8 | import ftpio |
81fdf589 MM |
9 | from mailer import Message |
10 | import config | |
11 | cval=config.value | |
514f66ab | 12 | |
f053c9e6 MM |
13 | nocheckbuild=False |
14 | if len(sys.argv) > 4 and sys.argv[1]=='-nb': | |
15 | nocheckbuild=True | |
16 | sys.argv=sys.argv[1:] | |
17 | ||
18 | if len(sys.argv) < 4: | |
749b120d | 19 | print "ERR: not enough parameters given" |
f053c9e6 MM |
20 | print "move.py [options] src-tree dst-tree package [package2 package3 ...]" |
21 | print "\nOptions:" | |
22 | print " -nb Do not check if builds are finished.\n" | |
514f66ab MM |
23 | sys.exit(1) |
24 | ||
6ebc8df7 MM |
25 | checkdir(sys.argv[1]) |
26 | checkdir(sys.argv[2]) | |
514f66ab | 27 | |
0a108b7f | 28 | ftpio.connect('move') |
514f66ab | 29 | |
0a108b7f | 30 | if not ftpio.lock(sys.argv[1], True): |
749b120d | 31 | print "ERR: %s tree already locked" % sys.argv[1] |
0a108b7f MM |
32 | sys.exit(1) |
33 | ||
34 | if not ftpio.lock(sys.argv[2], True): | |
35 | ftpio.unlock(sys.argv[1]) | |
749b120d | 36 | print "ERR: %s tree already locked" % sys.argv[2] |
0a108b7f MM |
37 | sys.exit(1) |
38 | ||
39 | try: | |
f053c9e6 MM |
40 | srctree=ftptree.FtpTree(sys.argv[1], loadall=True) |
41 | dsttree=ftptree.FtpTree(sys.argv[2]) | |
42 | if nocheckbuild: | |
43 | srctree.do_checkbuild=False | |
0a108b7f MM |
44 | srctree.mark4moving(sys.argv[3:]) |
45 | ||
46 | srctree.movepkgs(dsttree) | |
47 | except ftptree.SomeError: | |
f053c9e6 | 48 | # In case of problems we need to unlock the trees before exiting |
0a108b7f MM |
49 | ftpio.unlock(sys.argv[1]) |
50 | ftpio.unlock(sys.argv[2]) | |
51 | sys.exit(1) | |
52 | ||
53 | ftpio.unlock(sys.argv[1]) | |
54 | ftpio.unlock(sys.argv[2]) | |
514f66ab | 55 | |
81fdf589 MM |
56 | if 'logs_list' not in cval: |
57 | sys.exit(0) | |
58 | ||
59 | print 'Sending mail notification...', | |
60 | ||
61 | pkgs={} | |
62 | ||
63 | for pkg in srctree.marked4moving: | |
64 | requesters=[] | |
65 | for bid in pkg.build.keys(): | |
66 | if pkg.build[bid].requester not in requesters: | |
67 | requesters.append(pkg.build[bid].requester) | |
85f3481a | 68 | pkgs[pkg.nvr]=requesters |
81fdf589 MM |
69 | |
70 | m=Message() | |
71 | m.set_headers(to=cval['logs_list'], subject='MOVED: %s => %s... %d packages' % | |
72 | (sys.argv[1], sys.argv[2], len(pkgs))) | |
73 | m.write(('SrcTree: %s DstTree: %s\n' + | |
74 | 'Amount: %d\n\n---- Moved:\n\n') % (sys.argv[1], sys.argv[2], len(pkgs))) | |
75 | ||
85f3481a MM |
76 | for nvr in sorted(pkgs.keys()): |
77 | m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr]))) | |
81fdf589 MM |
78 | |
79 | m.send() | |
80 | ||
81 | print 'done.' | |
82 |