]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blob - bin/pfa-mvpkg
- syntax
[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 value as config
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 ftpio.connect('move')
28
29 if not ftpio.lock(sys.argv[1], True):
30     print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
31     sys.exit(1)
32
33 if not ftpio.lock(sys.argv[2], True):
34     ftpio.unlock(sys.argv[1])
35     print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[2]
36     sys.exit(1)
37
38 try:
39     srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
40     dsttree = ftptree.FtpTree(sys.argv[2])
41     if nocheckbuild:
42         srctree.do_checkbuild = False
43     srctree.mark4moving(sys.argv[3:])
44
45     srctree.movepkgs(dsttree)
46 except ftptree.SomeError:
47     # In case of problems we need to unlock the trees before exiting
48     ftpio.unlock(sys.argv[1])
49     ftpio.unlock(sys.argv[2])
50     sys.exit(1)
51
52 ftpio.unlock(sys.argv[1])
53 ftpio.unlock(sys.argv[2])
54
55 if 'logs_list' not in config:
56     sys.exit(0)
57
58 print 'Sending mail notification...',
59
60 pkgs = {}
61
62 for pkg in srctree.marked4moving:
63     requesters = []
64     for bid in pkg.build.keys():
65         if pkg.build[bid].requester not in requesters:
66             requesters.append(pkg.build[bid].requester)
67     pkgs[pkg.nvr] = requesters
68
69 m = Message()
70 m.set_headers(
71         to = config['logs_list'],
72         subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
73 )
74 m.write(
75     (
76     'SrcTree: %s                               DstTree: %s\n' +
77     'Amount: %d\n\n---- Moved:\n\n'
78     ) % (sys.argv[1], sys.argv[2], len(pkgs))
79 )
80
81 for nvr in sorted(pkgs.keys()):
82     m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))
83
84 m.send()
85
86 print 'done.'
This page took 0.049997 seconds and 4 git commands to generate.