]>
Commit | Line | Data |
---|---|---|
a1e62e44 | 1 | #!/usr/bin/env python3 |
514f66ab MM |
2 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et |
3 | ||
2ec96333 JR |
4 | from __future__ import print_function |
5 | ||
6ebc8df7 | 6 | import sys, os |
2f949c90 | 7 | sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules') |
f053c9e6 | 8 | import ftptree |
6ebc8df7 | 9 | from common import checkdir |
5959a5e8 | 10 | import ftpio |
81fdf589 | 11 | from mailer import Message |
213a164a | 12 | from config import archived_trees, logs_list |
514f66ab | 13 | |
ce26983c | 14 | os.umask(0o022) |
73fb6f92 | 15 | |
9bf038aa ER |
16 | nocheckbuild = False |
17 | if len(sys.argv) > 4 and sys.argv[1] == '-nb': | |
18 | nocheckbuild = True | |
19 | sys.argv = sys.argv[1:] | |
f053c9e6 MM |
20 | |
21 | if len(sys.argv) < 4: | |
2ec96333 JR |
22 | print("ERR: not enough parameters given", file=sys.stderr) |
23 | print("move.py [options] src-tree dst-tree package [package2 package3 ...]", file=sys.stderr) | |
24 | print("\nOptions:", file=sys.stderr) | |
25 | print(" -nb Do not check if builds are finished.\n", file=sys.stderr) | |
514f66ab MM |
26 | sys.exit(1) |
27 | ||
6ebc8df7 MM |
28 | checkdir(sys.argv[1]) |
29 | checkdir(sys.argv[2]) | |
514f66ab | 30 | |
213a164a ER |
31 | if sys.argv[2] in archived_trees: |
32 | archivetreename = ".archive/" + sys.argv[2] | |
33 | checkdir(archivetreename) | |
34 | else: | |
35 | archivetreename = None | |
36 | ||
0a108b7f | 37 | ftpio.connect('move') |
514f66ab | 38 | |
0a108b7f | 39 | if not ftpio.lock(sys.argv[1], True): |
2ec96333 | 40 | print("ERR: %s tree already locked" % sys.argv[1], file=sys.stderr) |
0a108b7f MM |
41 | sys.exit(1) |
42 | ||
43 | if not ftpio.lock(sys.argv[2], True): | |
44 | ftpio.unlock(sys.argv[1]) | |
2ec96333 | 45 | print("ERR: %s tree already locked" % sys.argv[2], file=sys.stderr) |
0a108b7f MM |
46 | sys.exit(1) |
47 | ||
213a164a ER |
48 | if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True): |
49 | ftpio.unlock(sys.argv[2]) | |
50 | ftpio.unlock(sys.argv[1]) | |
2ec96333 | 51 | print("ERR: %s tree already locked" % archivetreename, file=sys.stderr) |
213a164a ER |
52 | sys.exit(1) |
53 | ||
0a108b7f | 54 | try: |
9bf038aa ER |
55 | srctree = ftptree.FtpTree(sys.argv[1], loadall = True) |
56 | dsttree = ftptree.FtpTree(sys.argv[2]) | |
213a164a ER |
57 | if archivetreename != None: |
58 | archivetree = ftptree.FtpTree(archivetreename) | |
59 | else: | |
60 | archivetree = None | |
f053c9e6 | 61 | if nocheckbuild: |
9bf038aa | 62 | srctree.do_checkbuild = False |
f1d0a922 AM |
63 | pkgs = list(set(sys.argv[3:])) |
64 | srctree.mark4moving(pkgs) | |
0a108b7f | 65 | |
213a164a | 66 | srctree.movepkgs(dsttree, archivetree = archivetree) |
0a108b7f | 67 | except ftptree.SomeError: |
f053c9e6 | 68 | # In case of problems we need to unlock the trees before exiting |
0a108b7f MM |
69 | ftpio.unlock(sys.argv[1]) |
70 | ftpio.unlock(sys.argv[2]) | |
213a164a ER |
71 | if archivetreename != None: |
72 | ftpio.unlock(archivetreename) | |
0a108b7f MM |
73 | sys.exit(1) |
74 | ||
75 | ftpio.unlock(sys.argv[1]) | |
76 | ftpio.unlock(sys.argv[2]) | |
213a164a ER |
77 | if archivetreename != None and archivetreename != sys.argv[1]: |
78 | ftpio.unlock(archivetreename) | |
514f66ab | 79 | |
213a164a | 80 | if logs_list == None: |
81fdf589 MM |
81 | sys.exit(0) |
82 | ||
2ec96333 | 83 | print('Sending mail notification to %s...' % logs_list) |
81fdf589 | 84 | |
9bf038aa | 85 | pkgs = {} |
81fdf589 MM |
86 | |
87 | for pkg in srctree.marked4moving: | |
9bf038aa | 88 | requesters = [] |
81fdf589 MM |
89 | for bid in pkg.build.keys(): |
90 | if pkg.build[bid].requester not in requesters: | |
91 | requesters.append(pkg.build[bid].requester) | |
9bf038aa ER |
92 | pkgs[pkg.nvr] = requesters |
93 | ||
3d661e65 AM |
94 | ftpadmin = "(unknown)" |
95 | try: | |
96 | ftpadmin = os.environ['FTPADM'] | |
9c170c61 | 97 | except KeyError as e: |
3d661e65 | 98 | pass |
9bf038aa ER |
99 | m = Message() |
100 | m.set_headers( | |
213a164a | 101 | to = logs_list, |
9bf038aa ER |
102 | subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs)) |
103 | ) | |
93b13197 | 104 | |
9bf038aa ER |
105 | m.write( |
106 | ( | |
93b13197 ER |
107 | 'FTP admin %(ftpadmin)s moved from *%(srctree)s* to *%(dsttree)s* %(count)d packages\n\n' + |
108 | '---- Package name ---- Package built by:\n\n' | |
109 | ) % { | |
3d661e65 | 110 | 'ftpadmin' : ftpadmin, |
93b13197 ER |
111 | 'srctree' : sys.argv[1], |
112 | 'dsttree' : sys.argv[2], | |
113 | 'count' : len(pkgs), | |
114 | } | |
9bf038aa | 115 | ) |
81fdf589 | 116 | |
85f3481a MM |
117 | for nvr in sorted(pkgs.keys()): |
118 | m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr]))) | |
81fdf589 MM |
119 | |
120 | m.send() | |
121 | ||
2ec96333 | 122 | print('done.') |