]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blob - bin/pfa-mvpkg
- raw python version... in case ep09 explodes
[projects/pld-ftp-admin.git] / bin / pfa-mvpkg
1 #!/usr/bin/env python
2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
3
4 import sys, os, config, string, urllib, re
5
6 def fileexists(path):
7     try:
8         os.stat(path)
9     except OSError, (errno, errmsg):
10         return False
11     else:
12         return True
13
14
15 if len(sys.argv) < 4:
16     print "Not enough parameters given"
17     print "move.py src-tree dst-tree package1 [package2...]"
18     sys.exit(1)
19
20 srctree=config.value['ftp_dir']+'/'+sys.argv[1]
21 dsttree=config.value['ftp_dir']+'/'+sys.argv[2]
22 errnum=0
23
24 if not fileexists(srctree):
25     print srctree + " does not exist" 
26     sys.exit(1)
27
28 if not fileexists(dsttree):
29     print dsttree + " does not exist"
30     sys.exit(1)
31
32 def normalizenames(pkgname):
33     found=string.find(pkgname, '.src.rpm')
34     if found==-1:
35         return pkgname
36     else:
37         return pkgname[:found]
38         
39
40 pkgnames=map(normalizenames, sys.argv[3:])
41
42 class Pkg:
43     def __init__(self, name, tree):
44         self.file={}
45         self.info={}
46         f=open(tree+'/SRPMS/.metadata/'+name+'.src.rpm.info', 'r')
47         for entry in f.readlines():
48             i=string.split(string.strip(entry), ':')
49             if i[0] == 'info':
50                 if len(i)==3:
51                     if i[1]=='buildid':
52                         if not self.info.has_key(i[1]):
53                             self.info['buildid']=[i[2]]
54                         else:
55                             self.info['buildid'].append(i[2])
56                     else:
57                         self.info[i[1]]=i[2]
58                 else:
59                     self.info[i[1]]=i[2:]
60             elif i[0] == 'file':
61                 if not self.file.has_key(i[1]):
62                     self.file[i[1]]=[]
63                 self.file[i[1]].append(i[2])
64         f.close()
65
66 pkglist={}
67
68 for name in pkgnames:
69     if not fileexists(srctree+'/SRPMS/.metadata/'+name+'.src.rpm.info'):
70         errnum=errnum+1
71         print name+" was not found in source tree"
72     else:
73         pkglist[name]=Pkg(name, srctree)
74
75 if not errnum == 0:
76     print "%d error(s) encountered... aborting" % errnum
77     sys.exit(1)
78
79 #f=urllib.urlopen('http://ep09.pld-linux.org/~builderth/queue.txt')
80 f=open('queue.txt')
81
82 requests={}
83 reid=re.compile(r'^.*id=(.*) pri.*$')
84
85 for i in re.findall(re.compile(r'^group:.*$|builders:.*$', re.M), f.read()):
86     if i[0]=='g':
87         id=reid.sub(r'\1', i)
88         requests[id]=""
89     elif i[0]=='b':
90         requests[id]=requests[id]+i
91
92 f.close()
93
94 for pkg in pkglist.keys():
95     for bid in pkglist[pkg].info['buildid']:
96         if requests.has_key(bid) and not requests[bid].find('?') == -1:
97             errnum=errnum+1
98             print "Building of package %s (buildid %s) not finished" % (pkg,bid)
99
100 if not errnum == 0:
101     print "%d error(s) encountered... aborting" % errnum
102     sys.exit(1)
103
104 dsttreefiles=map(normalizenames, os.listdir(dsttree+'/SRPMS/.metadata/'))
105
106
107 def find_other_pkgs(pkg):
108     ziewre=re.compile(string.join(pkg.split('-')[:-2], '-')+'-[^-]*-[^-]*$')
109     def filter_other_pkgs(x):
110         if ziewre.match(x):
111             return x
112         else:
113             return None
114     return filter(filter_other_pkgs, dsttreefiles)
115
116 for pkg in pkglist.keys():
117     otherpkgnames=find_other_pkgs(pkg)
118     curarchs=[]
119     missingarchs=[]
120     for somepkg in otherpkgnames:
121         curarchs.extend(Pkg(somepkg, dsttree).file.keys())
122     for arch in curarchs:
123         if arch not in pkglist[pkg].file.keys():
124             missingarchs.append(arch)
125
126     if missingarchs:
127         errnum=errnum+1
128         print 'Moving pkg %s would remove archs: %s' % (pkg, missingarchs)
129
130 if not errnum == 0:
131     print "%d error(s) encountered... aborting" % errnum
132     sys.exit(1)
133
134
135
This page took 0.034738 seconds and 4 git commands to generate.