]>
Commit | Line | Data |
---|---|---|
38b2b764 MM |
1 | #!/usr/bin/env python |
2 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et | |
3 | ||
4 | import sys, os | |
5 | sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules') | |
6 | from config import incoming_dir, default_to, ftp_archs | |
7 | import config | |
8 | from common import fileexists | |
9 | ||
10 | def log(msg): | |
11 | print msg | |
12 | ||
13 | def rm(file): | |
14 | #os.remove() | |
15 | print 'rm: '+file | |
16 | ||
17 | def mv(src, dst): | |
18 | #os.rename() | |
19 | print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1]) | |
20 | ||
21 | def 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 | ||
29 | def getsrcrpm(content): | |
30 | for line in content.splitlines(): | |
31 | if line[:11]=='file:SRPMS:': | |
32 | return line.split(':')[2] | |
33 | ||
34 | def 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 | ||
43 | for 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 | ||
71 | def 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 | ||
88 | for 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 |