]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - bin/pfa-from-incoming
- add 'separate_noarch' config option (on for Th and off for Ac)
[projects/pld-ftp-admin.git] / bin / pfa-from-incoming
index a4680d6480779e7f629d988c08d9461da3e49dc9..429650c9b6807bc591fb66aef131ca1db27798ff 100644 (file)
@@ -5,19 +5,23 @@ import sys, os
 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
 from config import incoming_dir, default_to, ftp_archs
 import config
-from common import noarchcachedir, tmpdir
+from common import noarchcachedir, tmpdir, fileexists
 from baseftptree import BaseFtpTree, BasePkg
+cval=config.value
+import ftpio
 
-def log(msg):
-    print msg
+try:
+    ftpio.connect('from-incoming')
+except:
+    sys.exit(0)
 
 def rm(file):
-    #os.remove()
-    print 'rm: '+file
+    os.remove(file)
+    #print 'rm: '+file
 
 def mv(src, dst):
-    #os.rename()
-    print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
+    os.rename(src, dst+'/'+src.split('/')[-1])
+    #print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
 
 def findfiles(dir):
     def filterinfos(x):
@@ -36,7 +40,10 @@ def getcontent(file):
     else:
         return content[:-4]
 
-ftptree=BaseFtpTree(config.value['default_to'])
+ftptree=BaseFtpTree(cval['default_to'])
+
+if not ftpio.lock(cval['default_to']):
+    sys.exit(0)
 
 for uploadinfo in findfiles(incoming_dir+'SRPMS'):
     content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
@@ -47,7 +54,7 @@ for uploadinfo in findfiles(incoming_dir+'SRPMS'):
     srpm=pkg.files['SRPMS'][0]
 
     if ftptree.has_key(`pkg`):
-        log("%s already present in %s; removing newer files" %
+        ftpio.log("%s already present in %s; removing newer files" %
             (srpm, ftptree))
         rm(incoming_dir+'SRPMS/'+srpm)
         f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
@@ -65,8 +72,55 @@ for uploadinfo in findfiles(incoming_dir+'SRPMS'):
 
     rm(incoming_dir+'SRPMS/'+uploadinfo)
 
-def send_noarch_msg(files_differ, reqs_differ):
-    pass
+def send_noarch_msg(files_differ, reqs_differ, pkg, rpm, 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="Noarch error: %s files differ among builders" % rpm
+    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)
+
+    if files_differ:
+        f=open("%s/files.diff" % tmpdir, 'r')
+        sm.write("Difference between %s (currently in %s) and %s FILES\n" %
+              (pkg.noarch_arch[rpm], `ftptree`, arch)),
+        for line in f.readlines(True)[2:]:
+            sm.write(line)
+        f.close()
+
+    sm.write('\n')
+
+    if reqs_differ:
+        f=open("%s/reqs.diff" % tmpdir, 'r')
+        sm.write("Difference between %s (currently in %s) and %s REQS\n" %
+              (pkg.noarch_arch[rpm], `ftptree`, arch)),
+        for line in f.readlines(True)[2:]:
+            sm.write(line)
+        f.close()
+
+    sm.close()
+
+   
 
 def move_noarch(f, arch, rpm, dstpkg):
     if dstpkg.noarch_arch.has_key(rpm):
@@ -86,10 +140,7 @@ def move_noarch(f, arch, rpm, dstpkg):
             reqs_differ=True
 
         if files_differ or reqs_differ:
-            # TODO: sending this thing will be a little more problematic
-            # than I originally thought
-            #send_noarch_msg(files_differ, reqs_differ)
-            print 'files or reqs differ'
+            send_noarch_msg(files_differ, reqs_differ, dstpkg, rpm, arch)
 
         rm(incoming_dir+arch+'/'+rpm)
     else:
@@ -115,7 +166,7 @@ for arch in ftp_archs:
         dstpkg=BasePkg(`srcpkg`, ftptree)
 
         if dstpkg.files.has_key(arch):
-            log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
+            ftpio.log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
             for rpm in srcpkg.files['ARCH']:
                 rm(incoming_dir+arch+'/'+rpm)
             rm(incoming_dir+arch+'/'+uploadinfo)
@@ -123,7 +174,7 @@ for arch in ftp_archs:
 
         f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
         for rpm in srcpkg.files['ARCH']:
-            if rpm[-11:]=='.noarch.rpm':
+            if rpm[-11:]=='.noarch.rpm' and config.separate_noarch:
                 move_noarch(f, arch, rpm, dstpkg)
             else:
                 f.write("file:%s:%s\n" % (arch, rpm))
@@ -132,3 +183,5 @@ for arch in ftp_archs:
 
         rm(incoming_dir+arch+'/'+uploadinfo)
 
+ftpio.unlock(cval['default_to'])
+
This page took 0.042582 seconds and 4 git commands to generate.