Handle deletion of packages with _multibuild (#2943)
Also consider its multibuild flavors for deletion.
This commit is contained in:
parent
1cf4e6bb02
commit
34aa902066
@ -21,6 +21,7 @@ from osclib.core import (builddepinfo, depends_on, duplicated_binaries_in_repo,
|
|||||||
|
|
||||||
from osclib.repochecks import installcheck, mirror
|
from osclib.repochecks import installcheck, mirror
|
||||||
from osclib.stagingapi import StagingAPI
|
from osclib.stagingapi import StagingAPI
|
||||||
|
from osclib.memoize import memoize
|
||||||
|
|
||||||
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
|
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||||
CheckResult = namedtuple('CheckResult', ('success', 'comment'))
|
CheckResult = namedtuple('CheckResult', ('success', 'comment'))
|
||||||
@ -69,20 +70,33 @@ class InstallChecker(object):
|
|||||||
comments.append('Error: missing alternative provides for {}'.format(provide))
|
comments.append('Error: missing alternative provides for {}'.format(provide))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@memoize(session=True)
|
||||||
|
def pkg_with_multibuild_flavors(self, package):
|
||||||
|
ret = set([package])
|
||||||
|
# Add all multibuild flavors
|
||||||
|
mainprjresult = ET.fromstringlist(osc.core.show_results_meta(self.api.apiurl, self.api.project, multibuild=True))
|
||||||
|
for pkg in mainprjresult.xpath(f"result/status[starts-with(@package,'{package}:')]"):
|
||||||
|
ret.add(pkg.get('package'))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
def check_delete_request(self, req, to_ignore, to_delete, comments):
|
def check_delete_request(self, req, to_ignore, to_delete, comments):
|
||||||
package = req.get('package')
|
package = req.get('package')
|
||||||
if package in to_ignore or self.ignore_deletes:
|
if package in to_ignore or self.ignore_deletes:
|
||||||
self.logger.info('Delete request for package {} ignored'.format(package))
|
self.logger.info('Delete request for package {} ignored'.format(package))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
pkg_flavors = self.pkg_with_multibuild_flavors(package)
|
||||||
|
|
||||||
built_binaries = set()
|
built_binaries = set()
|
||||||
file_infos = []
|
file_infos = []
|
||||||
for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', package):
|
for flavor in pkg_flavors:
|
||||||
built_binaries.add(fileinfo.find('name').text)
|
for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', flavor):
|
||||||
file_infos.append(fileinfo)
|
built_binaries.add(fileinfo.find('name').text)
|
||||||
|
file_infos.append(fileinfo)
|
||||||
# extend the others - this asks for a refactoring, but we don't handle tons of delete requests often
|
# extend the others - this asks for a refactoring, but we don't handle tons of delete requests often
|
||||||
for ptd in to_delete:
|
for ptd in to_delete:
|
||||||
if package == ptd:
|
if ptd in pkg_flavors:
|
||||||
continue
|
continue
|
||||||
for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', ptd):
|
for fileinfo in fileinfo_ext_all(self.api.apiurl, self.api.project, self.api.cmain_repo, 'x86_64', ptd):
|
||||||
built_binaries.add(fileinfo.find('name').text)
|
built_binaries.add(fileinfo.find('name').text)
|
||||||
@ -93,7 +107,7 @@ class InstallChecker(object):
|
|||||||
for requiredby in provides.findall('requiredby[@name]'):
|
for requiredby in provides.findall('requiredby[@name]'):
|
||||||
result = result and self.check_required_by(fileinfo, provides, requiredby, built_binaries, comments)
|
result = result and self.check_required_by(fileinfo, provides, requiredby, built_binaries, comments)
|
||||||
|
|
||||||
what_depends_on = depends_on(api.apiurl, api.project, api.cmain_repo, [package], True)
|
what_depends_on = depends_on(api.apiurl, api.project, api.cmain_repo, pkg_flavors, True)
|
||||||
|
|
||||||
# filter out packages to be deleted
|
# filter out packages to be deleted
|
||||||
for ptd in to_delete:
|
for ptd in to_delete:
|
||||||
@ -174,7 +188,7 @@ class InstallChecker(object):
|
|||||||
to_delete = set()
|
to_delete = set()
|
||||||
for req in status.findall('staged_requests/request'):
|
for req in status.findall('staged_requests/request'):
|
||||||
if req.get('type') == 'delete':
|
if req.get('type') == 'delete':
|
||||||
to_delete.add(req.get('package'))
|
to_delete |= self.pkg_with_multibuild_flavors(req.get('package'))
|
||||||
|
|
||||||
for req in status.findall('staged_requests/request'):
|
for req in status.findall('staged_requests/request'):
|
||||||
if req.get('type') == 'delete':
|
if req.get('type') == 'delete':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user