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