]> 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 eb331aa..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')
 import ftptree
 from common import checkdir
 import ftpio
 from mailer import Message
-import config
-cval=config.value
+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:]
+nocheckbuild = False
+if len(sys.argv) > 4 and sys.argv[1] == '-nb':
+    nocheckbuild = True
+    sys.argv = sys.argv[1:]
 
 if len(sys.argv) < 4:
-    print "ERR: not enough parameters given"
-    print "move.py [options] src-tree dst-tree package [package2 package3 ...]"
-    print "\nOptions:"
-    print "      -nb    Do not check if builds are finished.\n"
+    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 "ERR: %s tree already locked" % 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 "ERR: %s tree already locked" % 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.FtpTree(sys.argv[1], loadall=True)
-    dsttree=ftptree.FtpTree(sys.argv[2])
+    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
-    srctree.mark4moving(sys.argv[3:])
+        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 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' not in cval:
+if logs_list == None:
     sys.exit(0)
 
-print 'Sending mail notification...',
+print('Sending mail notification to %s...' % logs_list)
 
-pkgs={}
+pkgs = {}
 
 for pkg in srctree.marked4moving:
-    requesters=[]
+    requesters = []
     for bid in pkg.build.keys():
         if pkg.build[bid].requester not in requesters:
             requesters.append(pkg.build[bid].requester)
-    pkgs[pkg.name]=requesters
-
-m=Message()
-m.set_headers(to=cval['logs_list'], subject='MOVED: %s => %s... %d packages' %
-                                    (sys.argv[1], sys.argv[2], len(pkgs)))
-m.write(('SrcTree: %s                               DstTree: %s\n' +
-       'Amount: %d\n\n---- Moved:\n\n') % (sys.argv[1], sys.argv[2], len(pkgs)))
+    pkgs[pkg.nvr] = requesters
 
-for name in sorted(pkgs.keys()):
-    m.write_line('%s ---- %s' % (name, ', '.join(pkgs[name])))
+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.'
-
+print('done.')
This page took 0.066227 seconds and 4 git commands to generate.