diff --git a/osclib/accept_command.py b/osclib/accept_command.py
index 44cbe901..908d88c7 100644
--- a/osclib/accept_command.py
+++ b/osclib/accept_command.py
@@ -24,24 +24,20 @@ class AcceptCommand(object):
self.api = api
def find_new_requests(self, project):
- query = "match=state/@name='new'+and+action/target/@project='{}'".format(project)
- url = self.api.makeurl(['search', 'request'], query)
+ match = f"state/@name='new' and action/target/@project='{project}'"
+ url = self.api.makeurl(['search', 'request'], { 'match': match })
f = http_GET(url)
root = ET.parse(f).getroot()
rqs = []
for rq in root.findall('request'):
- pkgs = []
- act_type = None
- actions = rq.findall('action')
- for action in actions:
- act_type = action.get('type')
- targets = action.findall('target')
- for t in targets:
- pkgs.append(str(t.get('package')))
-
- rqs.append({'id': int(rq.get('id')), 'packages': pkgs, 'type': act_type})
+ for action in rq.findall('action'):
+ for t in action.findall('target'):
+ rqs.append({'id': int(rq.get('id')),
+ 'package': str(t.get('package')),
+ 'type': action.get('type')})
+ break
return rqs
def reset_rebuild_data(self, project):
@@ -62,15 +58,43 @@ class AcceptCommand(object):
self.api.pseudometa_file_save('support_pkg_rebuild', content, 'accept command update')
def accept_all(self, projects, force=False, cleanup=True):
+ self.requests = { 'delete': [], 'submit': [] }
+
for prj in projects:
- if self.perform(self.api.prj_from_letter(prj), force):
+ project = self.api.prj_from_letter(prj)
+
+ status = self.api.project_status(project)
+ if status.get('state') != 'acceptable' and not force:
+ print('The project "{}" is not yet acceptable.'.format(project))
+ #return False
+
+ for request in status.findall('staged_requests/request'):
+ self.requests[request.get('type')].append(request.get('package'))
+
+ other_new = self.find_new_requests(self.api.project)
+ for req in other_new:
+ self.requests[req['type']].append(req['package'])
+
+ print(self.requests)
+ return True
+ for prj in projects:
+ project = self.api.prj_from_letter(prj)
+
+ if self.perform(project, force):
self.reset_rebuild_data(prj)
else:
return
if cleanup:
if self.api.item_exists(self.api.prj_from_letter(prj)):
self.cleanup(self.api.prj_from_letter(prj))
- self.accept_other_new()
+
+ for req in other_new:
+ oldspecs = self.api.get_filelist_for_package(pkgname=req['packages'][0], project=self.api.project, extension='spec')
+ print('Accepting request %d: %s' % (req['id'], ','.join(req['packages'])))
+ change_request_state(self.api.apiurl, str(req['id']), 'accepted', message='Accept to %s' % self.api.project)
+ # Check if all .spec files of the package we just accepted has a package container to build
+ self.create_new_links(self.api.project, req['packages'][0], oldspecs)
+
if self.api.project.startswith('openSUSE:'):
self.update_factory_version()
if self.api.item_exists(self.api.crebuild):
@@ -85,17 +109,9 @@ class AcceptCommand(object):
"""
- status = self.api.check_project_status(project)
-
- if not status:
- print('The project "{}" is not yet acceptable.'.format(project))
- if not force:
- return False
-
status = self.api.project_status(project)
packages = []
- rf = RequestFinder(self.api)
oldspecs = {}
for req in status.findall('staged_requests/request'):
packages.append(req.get('package'))
@@ -135,49 +151,8 @@ class AcceptCommand(object):
print("[cleanup] deleted %s/%s" % (project, package))
delete_package(self.api.apiurl, project, package, force=True, msg="autocleanup")
- # wipe Test-DVD binaries and breaks kiwi build
- if project.startswith('openSUSE:'):
- for package in pkglist:
- if package.startswith('Test-DVD-'):
- # intend to break the kiwi file
- arch = package.split('-')[-1]
- fakepkgname = 'I-am-breaks-kiwi-build'
- oldkiwifile = source_file_load(self.api.apiurl, project, package, 'PRODUCT-'+arch+'.kiwi')
- if oldkiwifile is not None:
- newkiwifile = re.sub(r'', '' % fakepkgname, oldkiwifile)
- source_file_save(self.api.apiurl, project, package, 'PRODUCT-' + arch + '.kiwi', newkiwifile)
-
- # do wipe binary now
- query = { 'cmd': 'wipe' }
- query['package'] = package
- query['repository'] = 'images'
-
- url = self.api.makeurl(['build', project], query)
- try:
- http_POST(url)
- except HTTPError as err:
- # failed to wipe isos but we can just continue
- pass
-
return True
- def accept_other_new(self):
- changed = False
-
- rqlist = self.find_new_requests(self.api.project)
- for req in rqlist:
- oldspecs = self.api.get_filelist_for_package(pkgname=req['packages'][0], project=self.api.project, extension='spec')
- print('Accepting request %d: %s' % (req['id'], ','.join(req['packages'])))
- if req['type'] == 'delete':
- # Remove devel project/package tag before accepting the request
- self.remove_obsoleted_develtag(self.api.project, req['packages'][0])
- change_request_state(self.api.apiurl, str(req['id']), 'accepted', message='Accept to %s' % self.api.project)
- # Check if all .spec files of the package we just accepted has a package container to build
- self.create_new_links(self.api.project, req['packages'][0], oldspecs)
- changed = True
-
- return changed
-
def remove_obsoleted_develtag(self, project, package):
xpath = {
'package': "@project='%s' and devel/@project=@project and devel/@package='%s'" % (project, package),
diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py
index 64ff28e1..a8893783 100644
--- a/osclib/stagingapi.py
+++ b/osclib/stagingapi.py
@@ -847,16 +847,6 @@ class StagingAPI(object):
url = self.makeurl(paths, opts)
return ET.parse(self.retried_GET(url)).getroot()
- def check_project_status(self, project):
- """
- Checks a staging project for acceptance.
- :param project: project to check
- :return true (ok)/false (empty prj) or list of strings with
- informations)
-
- """
- return self.project_status(project, requests=False).get('state') == 'acceptable'
-
def project_status_build_percent(self, status):
final, tobuild = self.project_status_build_sum(status)
return final / float(final + tobuild) * 100