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