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