2 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
4 import sys, os, config, string, urllib, re
9 except OSError, (errno, errmsg):
16 print "Not enough parameters given"
17 print "move.py src-tree dst-tree package1 [package2...]"
20 srctree=config.value['ftp_dir']+'/'+sys.argv[1]
21 dsttree=config.value['ftp_dir']+'/'+sys.argv[2]
24 if not fileexists(srctree):
25 print srctree + " does not exist"
28 if not fileexists(dsttree):
29 print dsttree + " does not exist"
32 def normalizenames(pkgname):
33 found=string.find(pkgname, '.src.rpm')
37 return pkgname[:found]
40 pkgnames=map(normalizenames, sys.argv[3:])
43 def __init__(self, name, tree):
46 f=open(tree+'/SRPMS/.metadata/'+name+'.src.rpm.info', 'r')
47 for entry in f.readlines():
48 i=string.split(string.strip(entry), ':')
52 if not self.info.has_key(i[1]):
53 self.info['buildid']=[i[2]]
55 self.info['buildid'].append(i[2])
61 if not self.file.has_key(i[1]):
63 self.file[i[1]].append(i[2])
69 if not fileexists(srctree+'/SRPMS/.metadata/'+name+'.src.rpm.info'):
71 print name+" was not found in source tree"
73 pkglist[name]=Pkg(name, srctree)
76 print "%d error(s) encountered... aborting" % errnum
79 #f=urllib.urlopen('http://ep09.pld-linux.org/~builderth/queue.txt')
83 reid=re.compile(r'^.*id=(.*) pri.*$')
85 for i in re.findall(re.compile(r'^group:.*$|builders:.*$', re.M), f.read()):
90 requests[id]=requests[id]+i
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:
98 print "Building of package %s (buildid %s) not finished" % (pkg,bid)
101 print "%d error(s) encountered... aborting" % errnum
104 dsttreefiles=map(normalizenames, os.listdir(dsttree+'/SRPMS/.metadata/'))
107 def find_other_pkgs(pkg):
108 ziewre=re.compile(string.join(pkg.split('-')[:-2], '-')+'-[^-]*-[^-]*$')
109 def filter_other_pkgs(x):
114 return filter(filter_other_pkgs, dsttreefiles)
116 for pkg in pkglist.keys():
117 otherpkgnames=find_other_pkgs(pkg)
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)
128 print 'Moving pkg %s would remove archs: %s' % (pkg, missingarchs)
131 print "%d error(s) encountered... aborting" % errnum