2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
5 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
6 from config import incoming_dir, default_to, ftp_archs
8 from common import noarchcachedir, tmpdir
9 from baseftptree import BaseFtpTree, BasePkg
20 print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
24 if x[-11:]=='.uploadinfo':
28 return filter(filterinfos, os.listdir(dir))
34 if not content[-5:]=='\nEND\n':
39 ftptree=BaseFtpTree(config.value['default_to'])
41 for uploadinfo in findfiles(incoming_dir+'SRPMS'):
42 content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
44 continue # Uploading not finished
46 pkg=BasePkg(uploadinfo[:-19], content=content)
47 srpm=pkg.files['SRPMS'][0]
49 if ftptree.has_key(`pkg`):
50 log("%s already present in %s; removing newer files" %
52 rm(incoming_dir+'SRPMS/'+srpm)
53 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
54 bid=pkg.build.keys()[0]
56 f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n"
57 % (bid, build.requester, bid, build.requester_email))
60 mv(incoming_dir+'SRPMS/'+srpm, default_to+'SRPMS/RPMS')
62 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'w')
66 rm(incoming_dir+'SRPMS/'+uploadinfo)
68 def send_noarch_msg(files_differ, reqs_differ):
71 def move_noarch(f, arch, rpm, dstpkg):
72 if dstpkg.noarch_arch.has_key(rpm):
73 os.system("rpm -qlp %s > %s/files.new" %
74 (incoming_dir+arch+'/'+rpm, tmpdir))
75 os.system("rpm -qRp %s |sort|uniq > %s/reqs.new" %
76 (incoming_dir+arch+'/'+rpm, tmpdir))
81 if os.system("diff -u %s/%s.filelist %s/files.new > %s/files.diff" %
82 (noarchcachedir, rpm, tmpdir, tmpdir)):
84 if os.system("diff -u %s/%s.reqlist %s/reqs.new > %s/reqs.diff" %
85 (noarchcachedir, rpm, tmpdir, tmpdir)):
88 if files_differ or reqs_differ:
89 # TODO: sending this thing will be a little more problematic
90 # than I originally thought
91 #send_noarch_msg(files_differ, reqs_differ)
92 print 'files or reqs differ'
94 rm(incoming_dir+arch+'/'+rpm)
96 os.system("rpm -qlp %s > %s/%s.filelist" %
97 (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
98 os.system("rpm -qRp %s |sort|uniq > %s/%s.reqlist" %
99 (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
100 f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpm, rpm, arch))
101 mv(incoming_dir+arch+'/'+rpm, default_to+'noarch/RPMS')
103 for arch in ftp_archs:
104 for uploadinfo in findfiles(incoming_dir+arch):
105 content=getcontent(incoming_dir+arch+'/'+uploadinfo)
107 continue # Uploading not finished
109 srcpkg=BasePkg(uploadinfo[:-19], content=content)
110 srpm=srcpkg.files['SRPMS'][0]
112 if not ftptree.has_key(`srcpkg`):
113 continue # We require the src.rpm to be present
115 dstpkg=BasePkg(`srcpkg`, ftptree)
117 if dstpkg.files.has_key(arch):
118 log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
119 for rpm in srcpkg.files['ARCH']:
120 rm(incoming_dir+arch+'/'+rpm)
121 rm(incoming_dir+arch+'/'+uploadinfo)
124 f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
125 for rpm in srcpkg.files['ARCH']:
126 if rpm[-11:]=='.noarch.rpm':
127 move_noarch(f, arch, rpm, dstpkg)
129 f.write("file:%s:%s\n" % (arch, rpm))
130 mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
133 rm(incoming_dir+arch+'/'+uploadinfo)