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