]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - bin/pfa-mvpkg
Fix umask values (python3 compat)
[projects/pld-ftp-admin.git] / bin / pfa-mvpkg
old mode 100644 (file)
new mode 100755 (executable)
index be72351..71e4c61
 #!/usr/bin/env python
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
+from __future__ import print_function
+
 import sys, os
 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
-from ftptree import FtpTree
+import ftptree
 from common import checkdir
+import ftpio
+from mailer import Message
+from config import archived_trees, logs_list
+
+os.umask(0o022)
+
+nocheckbuild = False
+if len(sys.argv) > 4 and sys.argv[1] == '-nb':
+    nocheckbuild = True
+    sys.argv = sys.argv[1:]
 
-if len(sys.argv) < 3:
-    print "Not enough parameters given"
-    print "move.py src-tree dst-tree [package1, package2, ...]"
+if len(sys.argv) < 4:
+    print("ERR: not enough parameters given", file=sys.stderr)
+    print("move.py [options] src-tree dst-tree package [package2 package3 ...]", file=sys.stderr)
+    print("\nOptions:", file=sys.stderr)
+    print("      -nb    Do not check if builds are finished.\n", file=sys.stderr)
     sys.exit(1)
 
 checkdir(sys.argv[1])
 checkdir(sys.argv[2])
 
+if sys.argv[2] in archived_trees:
+    archivetreename = ".archive/" + sys.argv[2]
+    checkdir(archivetreename)
+else:
+    archivetreename = None
+
 ftpio.connect('move')
 
 if not ftpio.lock(sys.argv[1], True):
-    print "%s tree already locked" %s sys.argv[1]
+    print("ERR: %s tree already locked" % sys.argv[1], file=sys.stderr)
     sys.exit(1)
 
 if not ftpio.lock(sys.argv[2], True):
     ftpio.unlock(sys.argv[1])
-    print "%s tree already locked" %s sys.argv[2]
+    print("ERR: %s tree already locked" % sys.argv[2], file=sys.stderr)
+    sys.exit(1)
+
+if archivetreename != None and archivetreename != sys.argv[1] and not ftpio.lock(archivetreename, True):
+    ftpio.unlock(sys.argv[2])
+    ftpio.unlock(sys.argv[1])
+    print("ERR: %s tree already locked" % archivetreename, file=sys.stderr)
     sys.exit(1)
 
 try:
-    srctree=FtpTree(sys.argv[1], loadall=True)
-    dsttree=FtpTree(sys.argv[2])
-    srctree.mark4moving(sys.argv[3:])
+    srctree = ftptree.FtpTree(sys.argv[1], loadall = True)
+    dsttree = ftptree.FtpTree(sys.argv[2])
+    if archivetreename != None:
+        archivetree = ftptree.FtpTree(archivetreename)
+    else:
+        archivetree = None
+    if nocheckbuild:
+        srctree.do_checkbuild = False
+    pkgs = list(set(sys.argv[3:]))
+    srctree.mark4moving(pkgs)
 
-    srctree.movepkgs(dsttree)
+    srctree.movepkgs(dsttree, archivetree = archivetree)
 except ftptree.SomeError:
-    # In case of problems we need to unlock the tree before exiting
+    # In case of problems we need to unlock the trees before exiting
     ftpio.unlock(sys.argv[1])
     ftpio.unlock(sys.argv[2])
+    if archivetreename != None:
+        ftpio.unlock(archivetreename)
     sys.exit(1)
 
 ftpio.unlock(sys.argv[1])
 ftpio.unlock(sys.argv[2])
+if archivetreename != None and archivetreename != sys.argv[1]:
+    ftpio.unlock(archivetreename)
+
+if logs_list == None:
+    sys.exit(0)
+
+print('Sending mail notification to %s...' % logs_list)
+
+pkgs = {}
+
+for pkg in srctree.marked4moving:
+    requesters = []
+    for bid in pkg.build.keys():
+        if pkg.build[bid].requester not in requesters:
+            requesters.append(pkg.build[bid].requester)
+    pkgs[pkg.nvr] = requesters
+
+ftpadmin = "(unknown)"
+try:
+    ftpadmin = os.environ['FTPADM']
+except KeyError as e:
+    pass
+m = Message()
+m.set_headers(
+        to = logs_list,
+        subject = 'MOVED: %s => %s... %d packages' % (sys.argv[1], sys.argv[2], len(pkgs))
+)
+
+m.write(
+    (
+        'FTP admin %(ftpadmin)s moved from *%(srctree)s* to *%(dsttree)s* %(count)d packages\n\n' +
+        '---- Package name ---- Package built by:\n\n'
+    ) % {
+        'ftpadmin' : ftpadmin,
+        'srctree' : sys.argv[1],
+        'dsttree' : sys.argv[2],
+        'count' : len(pkgs),
+    }
+)
+
+for nvr in sorted(pkgs.keys()):
+    m.write_line('%s ---- %s' % (nvr, ', '.join(pkgs[nvr])))
+
+m.send()
 
+print('done.')
This page took 0.049503 seconds and 4 git commands to generate.