2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
5 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
7 from common import checkdir
9 from mailer import Message
10 from config import archived_trees, logs_list
15 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
17 sys.argv = sys.argv[1:]
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"
29 if sys.argv[2] in archived_trees:
30 archivetreename = ".archive/" + sys.argv[2]
31 checkdir(archivetreename)
33 archivetreename = None
37 if not ftpio.lock(sys.argv[1], True):
38 print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
41 if not ftpio.lock(sys.argv[2], True):
42 ftpio.unlock(sys.argv[1])
43 print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[2]
46 if 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
53 srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
54 dsttree = ftptree.FtpTree(sys.argv[2])
55 if archivetreename != None:
56 archivetree = ftptree.FtpTree(archivetreename)
60 srctree.do_checkbuild = False
61 pkgs = list(set(sys.argv[3:]))
62 srctree.mark4moving(pkgs)
64 srctree.movepkgs(dsttree, archivetree = archivetree)
65 except ftptree.SomeError:
66 # In case of problems we need to unlock the trees before exiting
67 ftpio.unlock(sys.argv[1])
68 ftpio.unlock(sys.argv[2])
69 if archivetreename != None:
70 ftpio.unlock(archivetreename)
73 ftpio.unlock(sys.argv[1])
74 ftpio.unlock(sys.argv[2])
75 if archivetreename != None and archivetreename != sys.argv[1]:
76 ftpio.unlock(archivetreename)
81 print 'Sending mail notification to %s...' % logs_list
85 for pkg in srctree.marked4moving:
87 for bid in pkg.build.keys():
88 if pkg.build[bid].requester not in requesters:
89 requesters.append(pkg.build[bid].requester)
90 pkgs[pkg.nvr] = requesters
92 ftpadmin = "(unknown)"
94 ftpadmin = os.environ['FTPADM']
100 subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
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'
108 'ftpadmin' : ftpadmin,
109 'srctree' : sys.argv[1],
110 'dsttree' : sys.argv[2],
115 for nvr in sorted(pkgs.keys()):
116 m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))