]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blob - bin/pfa-from-incoming
- from-incoming.py uses Base{FtpTree,Pkg}; now I can implement sending errors
[projects/pld-ftp-admin.git] / bin / pfa-from-incoming
1 #!/usr/bin/env python
2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4 import sys, os
5 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
6 from config import incoming_dir, default_to, ftp_archs
7 import config
8 from common import noarchcachedir, tmpdir
9 from baseftptree import BaseFtpTree, BasePkg
10
11 def log(msg):
12     print msg
13
14 def rm(file):
15     #os.remove()
16     print 'rm: '+file
17
18 def mv(src, dst):
19     #os.rename()
20     print "mv: %s %s" % (src, dst+'/'+src.split('/')[-1])
21
22 def findfiles(dir):
23     def filterinfos(x):
24         if x[-11:]=='.uploadinfo':
25             return True
26         else:
27             return False
28     return filter(filterinfos, os.listdir(dir))
29
30 def getcontent(file):
31     f=open(file, 'r')
32     content=f.read()
33     f.close()
34     if not content[-5:]=='\nEND\n':
35         return None
36     else:
37         return content[:-4]
38
39 ftptree=BaseFtpTree(config.value['default_to'])
40
41 for uploadinfo in findfiles(incoming_dir+'SRPMS'):
42     content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
43     if not content:
44         continue # Uploading not finished
45
46     pkg=BasePkg(uploadinfo[:-19], content=content)
47     srpm=pkg.files['SRPMS'][0]
48
49     if ftptree.has_key(`pkg`):
50         log("%s already present in %s; removing newer files" %
51             (srpm, ftptree))
52         rm(incoming_dir+'SRPMS/'+srpm)
53         f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
54         bid=pkg.build.keys()[0]
55         build=pkg.build[bid]
56         f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n"
57                  % (bid, build.requester, bid, build.requester_email))
58         f.close()
59     else:
60         mv(incoming_dir+'SRPMS/'+srpm, default_to+'SRPMS/RPMS')
61  
62         f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'w')
63         f.write(content)
64         f.close()
65
66     rm(incoming_dir+'SRPMS/'+uploadinfo)
67
68 def send_noarch_msg(files_differ, reqs_differ):
69     pass
70
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))
77
78         files_differ=False
79         reqs_differ=False
80
81         if os.system("diff -u %s/%s.filelist %s/files.new > %s/files.diff" %
82                      (noarchcachedir, rpm, tmpdir, tmpdir)):
83             files_differ=True
84         if os.system("diff -u %s/%s.reqlist %s/reqs.new > %s/reqs.diff" %
85                      (noarchcachedir, rpm, tmpdir, tmpdir)):
86             reqs_differ=True
87
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'
93
94         rm(incoming_dir+arch+'/'+rpm)
95     else:
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')
102
103 for arch in ftp_archs:
104     for uploadinfo in findfiles(incoming_dir+arch):
105         content=getcontent(incoming_dir+arch+'/'+uploadinfo)
106         if not content:
107             continue # Uploading not finished
108
109         srcpkg=BasePkg(uploadinfo[:-19], content=content)
110         srpm=srcpkg.files['SRPMS'][0]
111
112         if not ftptree.has_key(`srcpkg`):
113             continue # We require the src.rpm to be present
114
115         dstpkg=BasePkg(`srcpkg`, ftptree)
116
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)
122             continue
123
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)
128             else:
129                 f.write("file:%s:%s\n" % (arch, rpm))
130                 mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
131         f.close()
132
133         rm(incoming_dir+arch+'/'+uploadinfo)
134
This page took 0.037095 seconds and 4 git commands to generate.