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