2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
4 from __future__ import print_function
7 sys.path.insert(0, os.environ['HOME']+'/tld-ftp-admin/modules')
9 from common import checkdir
11 from mailer import Message
12 from config import archived_trees, logs_list
17 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
19 sys.argv = sys.argv[1:]
22 print("ERR: not enough parameters given", file=sys.stderr)
23 print("move.py [options] src-tree dst-tree package [package2 package3 ...]", file=sys.stderr)
24 print("\nOptions:", file=sys.stderr)
25 print(" -nb Do not check if builds are finished.\n", file=sys.stderr)
31 if sys.argv[2] in archived_trees:
32 archivetreename = "archive"
33 checkdir(archivetreename)
35 archivetreename = None
39 if not ftpio.lock(sys.argv[1], True):
40 print("ERR: %s tree already locked" % sys.argv[1], file=sys.stderr)
43 if not ftpio.lock(sys.argv[2], True):
44 ftpio.unlock(sys.argv[1])
45 print("ERR: %s tree already locked" % sys.argv[2], file=sys.stderr)
48 if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
49 ftpio.unlock(sys.argv[2])
50 ftpio.unlock(sys.argv[1])
51 print("ERR: %s tree already locked" % archivetreename, file=sys.stderr)
55 srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
56 dsttree = ftptree.FtpTree(sys.argv[2])
57 if archivetreename != None:
58 archivetree = ftptree.FtpTree(archivetreename)
62 srctree.do_checkbuild = False
63 pkgs = list(set(sys.argv[3:]))
64 srctree.mark4moving(pkgs)
66 srctree.movepkgs(dsttree, archivetree = archivetree)
67 except ftptree.SomeError:
68 # In case of problems we need to unlock the trees before exiting
69 ftpio.unlock(sys.argv[1])
70 ftpio.unlock(sys.argv[2])
71 if archivetreename != None:
72 ftpio.unlock(archivetreename)
75 ftpio.unlock(sys.argv[1])
76 ftpio.unlock(sys.argv[2])
77 if archivetreename != None and archivetreename != sys.argv[1]:
78 ftpio.unlock(archivetreename)
83 print('Sending mail notification to %s...' % logs_list)
87 for pkg in srctree.marked4moving:
89 for bid in pkg.build.keys():
90 if pkg.build[bid].requester not in requesters:
91 requesters.append(pkg.build[bid].requester)
92 pkgs[pkg.nvr] = requesters
94 ftpadmin = "(unknown)"
96 ftpadmin = os.environ['FTPADM']
102 subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
107 'FTP admin %(ftpadmin)s moved from *%(srctree)s* to *%(dsttree)s* %(count)d packages\n\n' +
108 '---- Package name ---- Package built by:\n\n'
110 'ftpadmin' : ftpadmin,
111 'srctree' : sys.argv[1],
112 'dsttree' : sys.argv[2],
117 for nvr in sorted(pkgs.keys()):
118 m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))