]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - bin/pfa-from-incoming
Don't look .infofiles that are younger that 30 seconds.
[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
b2ef6244 4import sys, os, stat, time
38b2b764
MM
5sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
6from config import incoming_dir, default_to, ftp_archs
7import config
acd976ec 8from common import noarchcachedir, tmpdir, fileexists
bb2cb325 9from baseftptree import BaseFtpTree, BasePkg
200470c5 10cval=config.value
0a108b7f 11import ftpio
38b2b764 12
0a108b7f 13try:
72d16386 14 ftpio.connect('from-incoming-pid-%s' % os.getpid())
0a108b7f
MM
15except:
16 sys.exit(0)
38b2b764
MM
17
18def rm(file):
18c8e935
MM
19 os.remove(file)
20 #print 'rm: '+file
38b2b764
MM
21
22def mv(src, dst):
18c8e935
MM
23 os.rename(src, dst+'/'+src.split('/')[-1])
24 #print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
38b2b764
MM
25
26def findfiles(dir):
27 def filterinfos(x):
28 if x[-11:]=='.uploadinfo':
b2ef6244
AM
29 mtime = os.stat(dir + '/' + x)[ST_MTIME]
30 now = time.time()
31 # don't look into uploadinfo files for 30 seconds after scp
32 if now - mtime > 30:
33 return True
34 else:
35 return False
38b2b764
MM
36 else:
37 return False
38 return filter(filterinfos, os.listdir(dir))
39
38b2b764
MM
40def getcontent(file):
41 f=open(file, 'r')
42 content=f.read()
43 f.close()
44 if not content[-5:]=='\nEND\n':
45 return None
46 else:
47 return content[:-4]
48
200470c5 49ftptree=BaseFtpTree(cval['default_to'])
bb2cb325 50
0a108b7f 51if not ftpio.lock(cval['default_to']):
acd976ec
MM
52 sys.exit(0)
53
38b2b764
MM
54for uploadinfo in findfiles(incoming_dir+'SRPMS'):
55 content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
56 if not content:
57 continue # Uploading not finished
58
bb2cb325
MM
59 pkg=BasePkg(uploadinfo[:-19], content=content)
60 srpm=pkg.files['SRPMS'][0]
61
62 if ftptree.has_key(`pkg`):
0a108b7f 63 ftpio.log("%s already present in %s; removing newer files" %
bb2cb325
MM
64 (srpm, ftptree))
65 rm(incoming_dir+'SRPMS/'+srpm)
66 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
67 bid=pkg.build.keys()[0]
68 build=pkg.build[bid]
69 f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n"
70 % (bid, build.requester, bid, build.requester_email))
38b2b764
MM
71 f.close()
72 else:
bb2cb325 73 mv(incoming_dir+'SRPMS/'+srpm, default_to+'SRPMS/RPMS')
38b2b764 74
bb2cb325 75 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'w')
38b2b764
MM
76 f.write(content)
77 f.close()
78
79 rm(incoming_dir+'SRPMS/'+uploadinfo)
80
200470c5
MM
81def send_noarch_msg(files_differ, reqs_differ, pkg, rpm, arch):
82 req_email=pkg.build[pkg.lastbid].requester_email
83 req_bid=pkg.lastbid
84 cc_list=[]
0fa16f20
MM
85 if 'logs_list' in cval:
86 cc_list.append(cval['logs_list'])
200470c5
MM
87 m_subject="Noarch error: %s files differ among builders" % rpm
88 bids=pkg.build.keys()
89 if len(bids)>1:
90 for bid in bids:
91 newcc=pkg.build[bid].requester_email
92 if req_email!=newcc and newcc not in cc_list:
93 cc_list.append(newcc)
94
95 msg="From: %s\nTo: %s\n" % (cval['from_field'], req_email)
96 if cc_list:
97 msg=msg+"Cc: %s\n" % ", ".join(cc_list)
98 msg=msg+"""X-PLD-Builder: %s
99References: <%s@pld.src.builder>
100In-Reply-To: <%s@pld.src.builder>
101Subject: %s
102
103""" % (cval['xpldbuilder'], req_bid, req_bid, m_subject)
104
105 sm = os.popen("/usr/sbin/sendmail -t", "w")
106
107 sm.write(msg)
108
109 if files_differ:
110 f=open("%s/files.diff" % tmpdir, 'r')
111 sm.write("Difference between %s (currently in %s) and %s FILES\n" %
112 (pkg.noarch_arch[rpm], `ftptree`, arch)),
113 for line in f.readlines(True)[2:]:
114 sm.write(line)
115 f.close()
116
117 sm.write('\n')
118
119 if reqs_differ:
120 f=open("%s/reqs.diff" % tmpdir, 'r')
121 sm.write("Difference between %s (currently in %s) and %s REQS\n" %
122 (pkg.noarch_arch[rpm], `ftptree`, arch)),
123 for line in f.readlines(True)[2:]:
124 sm.write(line)
125 f.close()
126
127 sm.close()
128
129
bb2cb325
MM
130
131def move_noarch(f, arch, rpm, dstpkg):
132 if dstpkg.noarch_arch.has_key(rpm):
133 os.system("rpm -qlp %s > %s/files.new" %
134 (incoming_dir+arch+'/'+rpm, tmpdir))
135 os.system("rpm -qRp %s |sort|uniq > %s/reqs.new" %
136 (incoming_dir+arch+'/'+rpm, tmpdir))
137
138 files_differ=False
139 reqs_differ=False
140
141 if os.system("diff -u %s/%s.filelist %s/files.new > %s/files.diff" %
142 (noarchcachedir, rpm, tmpdir, tmpdir)):
143 files_differ=True
144 if os.system("diff -u %s/%s.reqlist %s/reqs.new > %s/reqs.diff" %
145 (noarchcachedir, rpm, tmpdir, tmpdir)):
146 reqs_differ=True
147
148 if files_differ or reqs_differ:
200470c5 149 send_noarch_msg(files_differ, reqs_differ, dstpkg, rpm, arch)
bb2cb325
MM
150
151 rm(incoming_dir+arch+'/'+rpm)
152 else:
153 os.system("rpm -qlp %s > %s/%s.filelist" %
154 (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
155 os.system("rpm -qRp %s |sort|uniq > %s/%s.reqlist" %
156 (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
157 f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpm, rpm, arch))
158 mv(incoming_dir+arch+'/'+rpm, default_to+'noarch/RPMS')
38b2b764
MM
159
160for arch in ftp_archs:
161 for uploadinfo in findfiles(incoming_dir+arch):
162 content=getcontent(incoming_dir+arch+'/'+uploadinfo)
163 if not content:
164 continue # Uploading not finished
165
bb2cb325
MM
166 srcpkg=BasePkg(uploadinfo[:-19], content=content)
167 srpm=srcpkg.files['SRPMS'][0]
38b2b764 168
bb2cb325 169 if not ftptree.has_key(`srcpkg`):
38b2b764
MM
170 continue # We require the src.rpm to be present
171
bb2cb325 172 dstpkg=BasePkg(`srcpkg`, ftptree)
38b2b764 173
bb2cb325 174 if dstpkg.files.has_key(arch):
0a108b7f 175 ftpio.log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
bb2cb325 176 for rpm in srcpkg.files['ARCH']:
2eb653d6
AM
177 try:
178 rm(incoming_dir+arch+'/'+rpm)
179 except OSError, e:
180 l = "Removing %s problem: %s" % (incoming_dir+arch+'/'+rpm, e)
181 ftpio.log(l)
182 print l
38b2b764
MM
183 rm(incoming_dir+arch+'/'+uploadinfo)
184 continue
185
bb2cb325
MM
186 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
187 for rpm in srcpkg.files['ARCH']:
796b7867 188 if rpm[-11:]=='.noarch.rpm' and config.separate_noarch:
bb2cb325
MM
189 move_noarch(f, arch, rpm, dstpkg)
190 else:
38b2b764
MM
191 f.write("file:%s:%s\n" % (arch, rpm))
192 mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
193 f.close()
194
195 rm(incoming_dir+arch+'/'+uploadinfo)
196
0a108b7f 197ftpio.unlock(cval['default_to'])
acd976ec 198
This page took 0.068634 seconds and 4 git commands to generate.