]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - bin/pfa-mvpkg
Switch to Python 3 for rpm.org rpm
[projects/pld-ftp-admin.git] / bin / pfa-mvpkg
CommitLineData
a1e62e44 1#!/usr/bin/env python3
514f66ab
MM
2# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
2ec96333
JR
4from __future__ import print_function
5
6ebc8df7 6import sys, os
2f949c90 7sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
f053c9e6 8import ftptree
6ebc8df7 9from common import checkdir
5959a5e8 10import ftpio
81fdf589 11from mailer import Message
213a164a 12from config import archived_trees, logs_list
514f66ab 13
ce26983c 14os.umask(0o022)
73fb6f92 15
9bf038aa
ER
16nocheckbuild = False
17if len(sys.argv) > 4 and sys.argv[1] == '-nb':
18 nocheckbuild = True
19 sys.argv = sys.argv[1:]
f053c9e6
MM
20
21if 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
28checkdir(sys.argv[1])
29checkdir(sys.argv[2])
514f66ab 30
213a164a
ER
31if sys.argv[2] in archived_trees:
32 archivetreename = ".archive/" + sys.argv[2]
33 checkdir(archivetreename)
34else:
35 archivetreename = None
36
0a108b7f 37ftpio.connect('move')
514f66ab 38
0a108b7f 39if 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
43if 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
48if 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 54try:
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 67except 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
75ftpio.unlock(sys.argv[1])
76ftpio.unlock(sys.argv[2])
213a164a
ER
77if archivetreename != None and archivetreename != sys.argv[1]:
78 ftpio.unlock(archivetreename)
514f66ab 79
213a164a 80if logs_list == None:
81fdf589
MM
81 sys.exit(0)
82
2ec96333 83print('Sending mail notification to %s...' % logs_list)
81fdf589 84
9bf038aa 85pkgs = {}
81fdf589
MM
86
87for 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
94ftpadmin = "(unknown)"
95try:
96 ftpadmin = os.environ['FTPADM']
9c170c61 97except KeyError as e:
3d661e65 98 pass
9bf038aa
ER
99m = Message()
100m.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
105m.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
117for nvr in sorted(pkgs.keys()):
118 m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))
81fdf589
MM
119
120m.send()
121
2ec96333 122print('done.')
This page took 3.397854 seconds and 4 git commands to generate.