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