remove links before accepting staging projects

This commit is contained in:
Stephan Kulow 2019-11-24 13:18:27 +01:00
parent 63bda17769
commit d4d9382a9e
2 changed files with 23 additions and 10 deletions

View File

@ -8,7 +8,7 @@ from xml.etree import cElementTree as ET
from osc.core import change_request_state, show_package_meta, wipebinaries
from osc.core import http_GET, http_PUT, http_DELETE, http_POST
from osc.core import delete_package, search, set_devel_project
from osc.core import delete_package, search
from osc.core import Request
from osc.util.helper import decode_it
from osclib.core import attribute_value_save
@ -57,6 +57,14 @@ class AcceptCommand(object):
if content != data:
self.api.pseudometa_file_save('support_pkg_rebuild', content, 'accept command update')
def delete_linked(self):
for package in self.requests['delete']:
for link in self.api.linked_packages(package):
if link['project'] in self.api.rings or link['project'] == self.api.project:
print(f"delete {link['project']}/{link['package']}")
delete_package(self.api.apiurl, link['project'], link['package'],
msg="remove link while accepting delete of {}".format(package))
def accept_all(self, projects, force=False, cleanup=True):
self.requests = { 'delete': [], 'submit': [] }
@ -75,7 +83,8 @@ class AcceptCommand(object):
for req in other_new:
self.requests[req['type']].append(req['package'])
print(self.requests)
print('requests', self.requests)
self.delete_linked()
return True
for prj in projects:
project = self.api.prj_from_letter(prj)
@ -153,14 +162,6 @@ class AcceptCommand(object):
return True
def remove_obsoleted_develtag(self, project, package):
xpath = {
'package': "@project='%s' and devel/@project=@project and devel/@package='%s'" % (project, package),
}
collection = search(self.api.apiurl, **xpath)['package']
for pkg in collection.findall('package'):
set_devel_project(self.api.apiurl, project, pkg.attrib['name'], devprj=None)
def create_new_links(self, project, pkgname, oldspeclist):
filelist = self.api.get_filelist_for_package(pkgname=pkgname, project=project, extension='spec')
removedspecs = set(oldspeclist) - set(filelist)

View File

@ -956,6 +956,18 @@ class StagingAPI(object):
return ret
def linked_packages(self, package, project=None):
if not project:
project=self.project
url = self.makeurl(['source', project, package], { 'cmd': 'showlinked' })
f = http_POST(url)
root = ET.parse(f).getroot()
result = []
for package in root.findall('package'):
result.append({'project': package.get('project'), 'package': package.get('name')})
return result
def create_and_wipe_package(self, project, package):
"""
Helper function for delete requests