]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - bin/pfa-from-incoming
- just needs noarch support now
[projects/pld-ftp-admin.git] / bin / pfa-from-incoming
CommitLineData
38b2b764
MM
1#!/usr/bin/env python
2# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4import sys, os
5sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
6from config import incoming_dir, default_to, ftp_archs
7import config
8from common import fileexists
9
10def log(msg):
11 print msg
12
13def rm(file):
14 #os.remove()
15 print 'rm: '+file
16
17def mv(src, dst):
18 #os.rename()
19 print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
20
21def findfiles(dir):
22 def filterinfos(x):
23 if x[-11:]=='.uploadinfo':
24 return True
25 else:
26 return False
27 return filter(filterinfos, os.listdir(dir))
28
29def getsrcrpm(content):
30 for line in content.splitlines():
31 if line[:11]=='file:SRPMS:':
32 return line.split(':')[2]
33
34def getcontent(file):
35 f=open(file, 'r')
36 content=f.read()
37 f.close()
38 if not content[-5:]=='\nEND\n':
39 return None
40 else:
41 return content[:-4]
42
43for uploadinfo in findfiles(incoming_dir+'SRPMS'):
44 content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
45 if not content:
46 continue # Uploading not finished
47
48 if fileexists(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info'):
49 f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'a')
50 for line in content.splitlines(True):
51 if line[:5]=='file:':
52 srpm=line.strip().split(':')[2]
53 log("%s already present in %s; removing newer files" %
54 (srpm, config.value['default_to']))
55 rm(incoming_dir+'SRPMS/'+srpm)
56 elif line[:5]=='info:':
57 f.write(line)
58 else:
59 log("Uknown line in uploadinfo file: "+line.strip())
60 f.close()
61 else:
62 mv(incoming_dir+'SRPMS/'+getsrcrpm(content), default_to+'SRPMS/RPMS')
63
64 f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'w')
65 f.write(content)
66 f.close()
67
68 rm(incoming_dir+'SRPMS/'+uploadinfo)
69
70
71def getfiles(filename):
72 f=open(filename, 'r')
73 file={}
74 noarch_arch={}
75 for line in f.readlines():
76 if line[:5]=='file:':
77 entry=line.split(':')
78 if not file.has_key(entry[1]):
79 file[entry[1]]=[]
80 file[entry[1]].append(entry[2])
81 elif line[:17]=='info:noarch_arch:':
82 entry=line.split(':')
83 noarch_arch[entry[2]]=entry[3]
84 f.close()
85 return (file, noarch_arch)
86
87
88for arch in ftp_archs:
89 for uploadinfo in findfiles(incoming_dir+arch):
90 content=getcontent(incoming_dir+arch+'/'+uploadinfo)
91 if not content:
92 continue # Uploading not finished
93
94 srcrpm=getsrcrpm(content)
95 dstinfofile=default_to+'SRPMS/.metadata/'+srcrpm+'.info'
96
97 if not fileexists(dstinfofile):
98 continue # We require the src.rpm to be present
99
100 (files, noarch_arch)=getfiles(dstinfofile)
101
102 if files.has_key(arch):
103 log("files from %s for arch %s already present in %s; removing newer files" % (srcrpm, arch, config.value['default_to']))
104 for line in content.splitlines():
105 if line[:10]=='file:ARCH:':
106 rpm=line.split(':')[2]
107 rm(incoming_dir+arch+'/'+rpm)
108 rm(incoming_dir+arch+'/'+uploadinfo)
109 continue
110
111 f=open(dstinfofile, 'a')
112 for line in content.splitlines():
113 if line[:10]=='file:ARCH:':
114 rpm=line.split(':')[2]
115 f.write("file:%s:%s\n" % (arch, rpm))
116 mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
117 f.close()
118
119 rm(incoming_dir+arch+'/'+uploadinfo)
120
This page took 0.04328 seconds and 4 git commands to generate.