]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - bin/pfa-mvpkg
- cleanup
[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
0a108b7f
MM
59 srctree.mark4moving(sys.argv[3:])
60
213a164a 61 srctree.movepkgs(dsttree, archivetree = archivetree)
0a108b7f 62except ftptree.SomeError:
f053c9e6 63 # In case of problems we need to unlock the trees before exiting
0a108b7f
MM
64 ftpio.unlock(sys.argv[1])
65 ftpio.unlock(sys.argv[2])
213a164a
ER
66 if archivetreename != None:
67 ftpio.unlock(archivetreename)
0a108b7f
MM
68 sys.exit(1)
69
70ftpio.unlock(sys.argv[1])
71ftpio.unlock(sys.argv[2])
213a164a
ER
72if archivetreename != None and archivetreename != sys.argv[1]:
73 ftpio.unlock(archivetreename)
514f66ab 74
213a164a 75if logs_list == None:
81fdf589
MM
76 sys.exit(0)
77
78print 'Sending mail notification...',
79
9bf038aa 80pkgs = {}
81fdf589
MM
81
82for pkg in srctree.marked4moving:
9bf038aa 83 requesters = []
81fdf589
MM
84 for bid in pkg.build.keys():
85 if pkg.build[bid].requester not in requesters:
86 requesters.append(pkg.build[bid].requester)
9bf038aa
ER
87 pkgs[pkg.nvr] = requesters
88
89m = Message()
90m.set_headers(
213a164a 91 to = logs_list,
9bf038aa
ER
92 subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
93)
94m.write(
95 (
96 'SrcTree: %s DstTree: %s\n' +
97 'Amount: %d\n\n---- Moved:\n\n'
98 ) % (sys.argv[1], sys.argv[2], len(pkgs))
99)
81fdf589 100
85f3481a
MM
101for nvr in sorted(pkgs.keys()):
102 m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))
81fdf589
MM
103
104m.send()
105
106print 'done.'
This page took 0.039457 seconds and 4 git commands to generate.