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