]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - bin/pfa-from-incoming
Fix umask values (python3 compat)
[projects/pld-ftp-admin.git] / bin / pfa-from-incoming
old mode 100644 (file)
new mode 100755 (executable)
index 46c436e..1696bf6
@@ -1,7 +1,9 @@
 #!/usr/bin/env python
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
-import sys, os, stat, time
+from __future__ import print_function
+
+import sys, os, stat, time, re
 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
 from config import incoming_dir, default_to, ftp_archs
 from config import value as cval
@@ -11,6 +13,8 @@ from baseftptree import BaseFtpTree, BasePkg
 from ftptree import FtpTree, Pkg
 import ftpio
 
+os.umask(0o022)
+
 def rm(file):
     os.remove(file)
 
@@ -94,9 +98,9 @@ Subject: %s
 
 def move_noarch(f, arch, rpmfile, dstpkg):
     if dstpkg.noarch_arch.has_key(rpmfile):
-        os.system("rpm -qlp %s | LC_ALL=C sort > %s/files.new" %
+        os.system("LC_ALL=C rpm -qlp %s | LC_ALL=C sort > %s/files.new" %
                   (incoming_dir + arch + '/' + rpmfile, tmpdir))
-        os.system("rpm -qRp %s | LC_ALL=C sort | uniq > %s/reqs.new" %
+        os.system("rpm -qRp %s | LC_ALL=C sort | LC_ALL=C uniq > %s/reqs.new" %
                   (incoming_dir + arch + '/' + rpmfile, tmpdir))
 
         files_differ = False
@@ -114,23 +118,62 @@ def move_noarch(f, arch, rpmfile, dstpkg):
 
         rm(incoming_dir + arch + '/' + rpmfile)
     else:
-        os.system("rpm -qlp %s > %s/%s.filelist" %
+        os.system("LC_ALL=C rpm -qlp %s | LC_ALL=C sort > %s/%s.filelist" %
                   (incoming_dir + arch + '/' + rpmfile, noarchcachedir, rpmfile))
-        os.system("rpm -qRp %s |sort|uniq > %s/%s.reqlist" %
+        os.system("rpm -qRp %s | LC_ALL=C sort | LC_ALL=C uniq > %s/%s.reqlist" %
                   (incoming_dir + arch + '/' + rpmfile, noarchcachedir, rpmfile))
-        f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpmfile, rpmfile, arch))
+        if not dstpkg.files.has_key(arch):
+            f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpmfile, rpmfile, arch))
         mv(incoming_dir + arch + '/' + rpmfile, default_to + 'noarch/RPMS')
 
+def send_vr_msg(snvr, anvr, pkg, arch):
+    req_email=pkg.build[pkg.lastbid].requester_email
+    req_bid=pkg.lastbid
+    cc_list=[]
+    if 'logs_list' in cval:
+        cc_list.append(cval['logs_list'])
+    m_subject="NVR error: %s version or relese differ among subpackages" % snvr[0]
+    bids=pkg.build.keys()
+    if len(bids)>1:
+        for bid in bids:
+            newcc=pkg.build[bid].requester_email
+            if req_email!=newcc and newcc not in cc_list:
+                cc_list.append(newcc)
+
+    msg="From: %s\nTo: %s\n" % (cval['from_field'], req_email)
+    if cc_list:
+        msg=msg+"Cc: %s\n" % ", ".join(cc_list)
+    msg=msg+"""X-PLD-Builder: %s
+References: <%s@pld.src.builder>
+In-Reply-To: <%s@pld.src.builder>
+Subject: %s
+
+""" % (cval['xpldbuilder'], req_bid, req_bid, m_subject)
+
+    sm = os.popen("/usr/sbin/sendmail -t", "w")
+
+    sm.write(msg)
+
+    sm.write("Difference between %s SRPM (currently in %s) and %s RPM NVR:\n\n" %
+          (snvr[0], `ftptree`, arch)),
+    sm.write("Expected (%s):\nV: %s\nR: %s\n\n" % snvr)
+    sm.write("RPM:\nN: %s\nV: %s\nR: %s\n" % anvr)
+    sm.write('\n')
+
+    sm.close()
+
 # main()
 try:
     ftpio.connect('from-incoming-pid-%s' % os.getpid())
 except:
-    sys.exit(0)
+    print("Can't get ftpiod connection")
+    sys.exit(1)
 
 ftptree = BaseFtpTree(cval['default_to'])
 
 if not ftpio.lock(cval['default_to']):
-    sys.exit(0)
+    print("Can't get lock: %s" % cval['default_to'])
+    sys.exit(1)
 
 moved_anything = False
 
@@ -147,8 +190,8 @@ for uploadinfo in findfiles(incoming_dir + 'SRPMS'):
         continue
 
     if ftptree.has_key(`pkg`):
-        ftpio.log("%s already present in %s; removing newer files" % (srpm, ftptree))
-        rm(incoming_dir + 'SRPMS/' + srpm)
+        ftpio.log("%s already present in %s; removing older files" % (srpm, ftptree))
+        rm(default_to + 'SRPMS/RPMS/' + srpm)
         f = open(default_to + 'SRPMS/.metadata/' + srpm+'.info', 'a')
         bid = pkg.build.keys()[0]
         build = pkg.build[bid]
@@ -156,12 +199,11 @@ for uploadinfo in findfiles(incoming_dir + 'SRPMS'):
                  % (bid, build.requester, bid, build.requester_email))
         f.close()
     else:
-        mv(incoming_dir + 'SRPMS/' + srpm, default_to + 'SRPMS/RPMS')
-
         f = open(default_to + 'SRPMS/.metadata/' + srpm + '.info', 'w')
         f.write(content)
         f.close()
 
+    mv(incoming_dir + 'SRPMS/' + srpm, default_to + 'SRPMS/RPMS')
     rm(incoming_dir + 'SRPMS/' + uploadinfo)
 
 for arch in ftp_archs:
@@ -177,6 +219,9 @@ for arch in ftp_archs:
         if not ftptree.has_key(`srcpkg`):
             continue # We require the src.rpm to be present
 
+        renvr = re.compile(r'(.*)-(.*)-(.*)\.[^.]*\.rpm')
+        srcnvr = renvr.match(srpm).groups()
+
         rpmfile_missing = [f for f in srcpkg.files['ARCH'] if not os.path.exists(incoming_dir + arch + '/'+f)]
         if len(rpmfile_missing):
             for filem in rpmfile_missing:
@@ -186,24 +231,33 @@ for arch in ftp_archs:
         dstpkg = BasePkg(`srcpkg`, ftptree)
 
         if dstpkg.files.has_key(arch):
-            ftpio.log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
-            for rpmfile in srcpkg.files['ARCH']:
+            ftpio.log("files from %s for arch %s already present in %s; removing older files" % (`srcpkg`, arch, ftptree))
+            for rpmfile in dstpkg.files[arch]:
+                if is_debuginfo(rpmfile):
+                    dstfile = default_to + arch + '/debuginfo'
+                else:
+                    dstfile = default_to + arch + '/RPMS'
                 try:
-                    rm(incoming_dir + arch + '/'+rpmfile)
-                except OSError, e:
-                    l = "Removing %s problem: %s" % (incoming_dir + arch + '/' + rpmfile, e)
+                    rm(dstfile + '/' + rpmfile)
+                except OSError as e:
+                    l = "Removing %s problem: %s" % (dstfile + '/' + rpmfile, e)
                     ftpio.log(l)
-                    print l
-            rm(incoming_dir + arch + '/' + uploadinfo)
-            continue
+                    print(l)
 
         f = open(default_to + 'SRPMS/.metadata/' + srpm + '.info', 'a')
         for rpmfile in srcpkg.files['ARCH']:
             moved_anything = True
+
+# Too much noise, too little use
+#            archnvr = renvr.match(rpmfile).groups()
+#            if srcnvr[1] != archnvr[1] or srcnvr[2] != archnvr[2]:
+#                send_vr_msg(srcnvr, archnvr, dstpkg, arch)
+
             if rpmfile[-11:] == '.noarch.rpm' and config.separate_noarch:
                 move_noarch(f, arch, rpmfile, dstpkg)
             else:
-                f.write("file:%s:%s\n" % (arch, rpmfile))
+                if not dstpkg.files.has_key(arch):
+                    f.write("file:%s:%s\n" % (arch, rpmfile))
                 srcfile = incoming_dir + arch + '/' + rpmfile
 
                 if is_debuginfo(rpmfile):
@@ -213,10 +267,10 @@ for arch in ftp_archs:
 
                 try:
                     mv(srcfile, dstfile)
-                except OSError, e:
+                except OSError as e:
                     l = "Moving %s to %s problem: %s" % (srcfile, dstfile, e)
                     ftpio.log(l)
-                    print l
+                    print(l)
         f.close()
 
         rm(incoming_dir + arch + '/' + uploadinfo)
@@ -224,4 +278,4 @@ for arch in ftp_archs:
 ftpio.unlock(cval['default_to'])
 
 if moved_anything:
-    os.system("%s/pld-ftp-admin/scripts/gen-indexes.py --quiet --noyum test > /dev/null" % (os.getenv("HOME")))
+    os.system("%s/pld-ftp-admin/bin/pfa-genindex --quiet test > /dev/null" % (os.getenv("HOME")))
This page took 0.059599 seconds and 4 git commands to generate.