]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - bin/pfa-mvpkg
make sure scripts are always executable
[projects/pld-ftp-admin.git] / bin / pfa-mvpkg
old mode 100644 (file)
new mode 100755 (executable)
index 57b5983..5693465
@@ -7,7 +7,9 @@ import ftptree
 from common import checkdir
 import ftpio
 from mailer import Message
-from config import value as config
+from config import archived_trees, logs_list
+
+os.umask(022)
 
 nocheckbuild = False
 if len(sys.argv) > 4 and sys.argv[1] == '-nb':
@@ -24,6 +26,12 @@ if len(sys.argv) < 4:
 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):
@@ -35,27 +43,42 @@ if not ftpio.lock(sys.argv[2], True):
     print >>sys.stderr, "ERR: %s tree already locked" % sys.argv[2]
     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
+    sys.exit(1)
+
 try:
     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:])
+    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 config:
+if logs_list == None:
     sys.exit(0)
 
-print 'Sending mail notification...',
+print 'Sending mail notification to %s...' % logs_list
 
 pkgs = {}
 
@@ -66,16 +89,27 @@ for pkg in srctree.marked4moving:
             requesters.append(pkg.build[bid].requester)
     pkgs[pkg.nvr] = requesters
 
+ftpadmin = "(unknown)"
+try:
+    ftpadmin = os.environ['FTPADM']
+except KeyError, e:
+    pass
 m = Message()
 m.set_headers(
-        to = config['logs_list'],
+        to = 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))
+        '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()):
This page took 0.055322 seconds and 4 git commands to generate.