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