--- /dev/null
+#!/usr/bin/env python
+# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
+
+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 fileexists
+
+def log(msg):
+ print msg
+
+def rm(file):
+ #os.remove()
+ print 'rm: '+file
+
+def mv(src, dst):
+ #os.rename()
+ print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
+
+def findfiles(dir):
+ def filterinfos(x):
+ if x[-11:]=='.uploadinfo':
+ return True
+ else:
+ return False
+ return filter(filterinfos, os.listdir(dir))
+
+def getsrcrpm(content):
+ for line in content.splitlines():
+ if line[:11]=='file:SRPMS:':
+ return line.split(':')[2]
+
+def getcontent(file):
+ f=open(file, 'r')
+ content=f.read()
+ f.close()
+ if not content[-5:]=='\nEND\n':
+ return None
+ else:
+ return content[:-4]
+
+for uploadinfo in findfiles(incoming_dir+'SRPMS'):
+ content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
+ if not content:
+ continue # Uploading not finished
+
+ if fileexists(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info'):
+ f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'a')
+ for line in content.splitlines(True):
+ if line[:5]=='file:':
+ srpm=line.strip().split(':')[2]
+ log("%s already present in %s; removing newer files" %
+ (srpm, config.value['default_to']))
+ rm(incoming_dir+'SRPMS/'+srpm)
+ elif line[:5]=='info:':
+ f.write(line)
+ else:
+ log("Uknown line in uploadinfo file: "+line.strip())
+ f.close()
+ else:
+ mv(incoming_dir+'SRPMS/'+getsrcrpm(content), default_to+'SRPMS/RPMS')
+
+ f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'w')
+ f.write(content)
+ f.close()
+
+ rm(incoming_dir+'SRPMS/'+uploadinfo)
+
+
+def getfiles(filename):
+ f=open(filename, 'r')
+ file={}
+ noarch_arch={}
+ for line in f.readlines():
+ if line[:5]=='file:':
+ entry=line.split(':')
+ if not file.has_key(entry[1]):
+ file[entry[1]]=[]
+ file[entry[1]].append(entry[2])
+ elif line[:17]=='info:noarch_arch:':
+ entry=line.split(':')
+ noarch_arch[entry[2]]=entry[3]
+ f.close()
+ return (file, noarch_arch)
+
+
+for arch in ftp_archs:
+ for uploadinfo in findfiles(incoming_dir+arch):
+ content=getcontent(incoming_dir+arch+'/'+uploadinfo)
+ if not content:
+ continue # Uploading not finished
+
+ srcrpm=getsrcrpm(content)
+ dstinfofile=default_to+'SRPMS/.metadata/'+srcrpm+'.info'
+
+ if not fileexists(dstinfofile):
+ continue # We require the src.rpm to be present
+
+ (files, noarch_arch)=getfiles(dstinfofile)
+
+ if files.has_key(arch):
+ log("files from %s for arch %s already present in %s; removing newer files" % (srcrpm, arch, config.value['default_to']))
+ for line in content.splitlines():
+ if line[:10]=='file:ARCH:':
+ rpm=line.split(':')[2]
+ rm(incoming_dir+arch+'/'+rpm)
+ rm(incoming_dir+arch+'/'+uploadinfo)
+ continue
+
+ f=open(dstinfofile, 'a')
+ for line in content.splitlines():
+ if line[:10]=='file:ARCH:':
+ rpm=line.split(':')[2]
+ f.write("file:%s:%s\n" % (arch, rpm))
+ mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
+ f.close()
+
+ rm(incoming_dir+arch+'/'+uploadinfo)
+