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
13 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
15 sys.argv = sys.argv[1:]
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"
27 if sys.argv[2] in archived_trees:
28 archivetreename = ".archive/" + sys.argv[2]
29 checkdir(archivetreename)
31 archivetreename = None
35 if not ftpio.lock(sys.argv[1], True):
36 print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[1]
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]
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
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)
58 srctree.do_checkbuild = False
59 pkgs = list(set(sys.argv[3:]))
60 srctree.mark4moving(pkgs)
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)
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)
79 print 'Sending mail notification to %s...' % logs_list
83 for pkg in srctree.marked4moving:
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
90 ftpadmin = "(unknown)"
92 ftpadmin = os.environ['FTPADM']
98 subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
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'
106 'ftpadmin' : ftpadmin,
107 'srctree' : sys.argv[1],
108 'dsttree' : sys.argv[2],
113 for nvr in sorted(pkgs.keys()):
114 m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))