112 lines
4.9 KiB
Python
112 lines
4.9 KiB
Python
from xml.etree import cElementTree as ET
|
|
|
|
from osc.core import makeurl
|
|
from osc.core import http_GET
|
|
|
|
|
|
class CleanupRings:
|
|
|
|
def __init__(self, apiurl):
|
|
self.bin2src = dict()
|
|
self.pkgdeps = dict()
|
|
self.sources = list()
|
|
self.apiurl = apiurl
|
|
self.links = dict()
|
|
|
|
def perform(self):
|
|
self.check_depinfo_ring('openSUSE:Factory:Rings:0-Bootstrap', 'openSUSE:Factory:Rings:1-MinimalX')
|
|
self.check_depinfo_ring('openSUSE:Factory:Rings:1-MinimalX', 'openSUSE:Factory:MainDesktops')
|
|
|
|
def find_inner_ring_links(self, prj):
|
|
url = makeurl(self.apiurl, ['source', prj], { 'view': 'info', 'nofilename': '1' })
|
|
f = http_GET(url)
|
|
root = ET.parse(f).getroot()
|
|
for si in root.findall('sourceinfo'):
|
|
linked = si.find('linked')
|
|
if not linked is None and linked.get('project') != 'openSUSE:Factory':
|
|
if not linked.get('project').startswith('openSUSE:Factory:Rings:'):
|
|
print ET.tostring(si)
|
|
self.links[linked.get('package')] = si.get('package')
|
|
|
|
def fill_pkgdeps(self, prj, repo, arch):
|
|
url = makeurl(self.apiurl, ['build', prj, repo, arch, '_builddepinfo'])
|
|
f = http_GET(url)
|
|
root = ET.parse(f).getroot()
|
|
|
|
for package in root.findall('package'):
|
|
source = package.find('source').text
|
|
if package.attrib['name'].startswith('preinstall'):
|
|
continue
|
|
self.sources.append(source)
|
|
|
|
for subpkg in package.findall('subpkg'):
|
|
subpkg = subpkg.text
|
|
if self.bin2src.has_key(subpkg):
|
|
print "bin $s defined twice $prj $source - $bin2src{$s}\n"
|
|
self.bin2src[subpkg] = source
|
|
|
|
for package in root.findall('package'):
|
|
source = package.find('source').text
|
|
for pkg in package.findall('pkgdep'):
|
|
if not self.bin2src.has_key(pkg.text):
|
|
if pkg.text.startswith('texlive-'):
|
|
for letter in range(ord('a'), ord('z') + 1):
|
|
self.pkgdeps['texlive-specs-' + chr(letter)] = 'texlive-specs-' + chr(letter)
|
|
else:
|
|
print "PKG NOT THERE", pkg.text
|
|
continue
|
|
b = self.bin2src[pkg.text]
|
|
self.pkgdeps[b] = source
|
|
|
|
def check_depinfo_ring(self, prj, nextprj):
|
|
url = makeurl(self.apiurl, ['build', prj, '_result'] )
|
|
root = ET.parse(http_GET(url)).getroot()
|
|
for repo in root.findall('result'):
|
|
repostate = repo.get('state', 'missing')
|
|
if not repostate in ['unpublished', 'published']:
|
|
print "Repo %s/%s is in state %s" % (repo.get('project'), repo.get('repository'), repostate)
|
|
return False
|
|
for package in repo.findall('status'):
|
|
code = package.get('code')
|
|
if not code in ['succeeded', 'excluded']:
|
|
print "Package %s/%s/%s is %s" % (repo.get('project'), repo.get('repository'), package.get('package'), code)
|
|
return False
|
|
|
|
self.find_inner_ring_links(prj)
|
|
self.fill_pkgdeps(prj, 'standard', 'x86_64')
|
|
|
|
if prj == 'openSUSE:Factory:Rings:1-MinimalX':
|
|
url = makeurl(self.apiurl, ['build', prj, 'images', 'x86_64', 'Test-DVD-x86_64', '_buildinfo'] )
|
|
root = ET.parse(http_GET(url)).getroot()
|
|
for bdep in root.findall('bdep'):
|
|
if not bdep.attrib.has_key('name'): continue
|
|
b = bdep.attrib['name']
|
|
if not self.bin2src.has_key(b): continue
|
|
b = self.bin2src[b]
|
|
self.pkgdeps[b] = 'MYdvd'
|
|
|
|
# if ($prj eq 'openSUSE:Factory:MainDesktops') {
|
|
# $dinfo->{MYcds} = {};
|
|
# $dinfo->{MYcds}->{pkgdep} = ();
|
|
# $dinfo->{MYcds}->{source} = 'MYcds';
|
|
# push(@{$dinfo->{MYcds}->{pkgdep}}, 'kiwi-image-livecd-gnome');
|
|
# push(@{$dinfo->{MYcds}->{pkgdep}}, 'kiwi-image-livecd-kde');
|
|
|
|
if prj == 'openSUSE:Factory:Rings:0-Bootstrap':
|
|
url = makeurl(self.apiurl, ['build', prj, 'standard', '_buildconfig'] )
|
|
for line in http_GET(url).read().split('\n'):
|
|
if line.startswith('Preinstall:') or line.startswith('Support:'):
|
|
for prein in line.split(':')[1].split():
|
|
if not self.bin2src.has_key(prein): continue
|
|
b = self.bin2src[prein]
|
|
self.pkgdeps[b] = 'MYinstall'
|
|
|
|
#print self.sources, self.bin2src, self.pkgdeps
|
|
|
|
for source in self.sources:
|
|
# next if ($key =~ m/^MY/ || $key =~ m/^texlive-specs-/ || $key =~ m/^kernel-/);
|
|
if not self.pkgdeps.has_key(source) and not self.links.has_key(source):
|
|
print "osc rdelete -m cleanup", prj, source
|
|
if nextprj:
|
|
print "osc linkpac -c openSUSE:Factory", source, nextprj
|