Delete adi projects whenever we'd build disable them

This commit is contained in:
Stephan Kulow 2019-12-06 07:35:38 +01:00
parent 24345fd45d
commit b60333075a
3 changed files with 40 additions and 27 deletions

View File

@ -116,6 +116,10 @@ class AcceptCommand(object):
time.sleep(1) time.sleep(1)
self.api.accept_status_comment(project, staging_packages[project]) self.api.accept_status_comment(project, staging_packages[project])
if self.api.is_adi_project(project):
self.api.delete_empty_adi_project(project)
return
self.api.staging_deactivate(project) self.api.staging_deactivate(project)
self.reset_rebuild_data(prj) self.reset_rebuild_data(prj)

View File

@ -5,7 +5,6 @@ from colorama import Fore
from osc import oscerr from osc import oscerr
from osc.core import get_request from osc.core import get_request
from osc.core import delete_project
from osc.core import show_package_meta from osc.core import show_package_meta
from osc import conf from osc import conf
@ -56,33 +55,19 @@ class AdiCommand:
return return
overall_state = info.get('state') overall_state = info.get('state')
if overall_state != 'acceptable' and overall_state != 'empty':
if overall_state == 'empty':
self.api.delete_empty_adi_project(project)
return
if overall_state != 'acceptable':
raise oscerr.WrongArgs('Missed some case') raise oscerr.WrongArgs('Missed some case')
# no longer accept/delete adi projects ready = []
return for req in info.findall('staged_requests/request'):
ready.append('{}[{}]'.format(Fore.CYAN + req.get('package') + Fore.RESET, req.get('id')))
if self.api.is_user_member_of(self.api.user, self.api.cstaging_group): if len(ready):
print(query_project + ' ' + Fore.GREEN + 'ready') print(query_project, Fore.GREEN + 'ready:', ', '.join(ready))
packages = []
for req in info.findall('staged_requests/request'):
msg = 'ready to accept'
print(' - {} [{}]'.format(Fore.CYAN + req.get('package') + Fore.RESET, req.get('id')))
self.api.rm_from_prj(project, request_id=req.get('id'), msg=msg)
self.api.do_change_review_state(req.get('id'), 'accepted', by_group=self.api.cstaging_group, message=msg)
packages.append(req.get('package'))
self.api.accept_status_comment(project, packages)
try:
delete_project(self.api.apiurl, project, force=True)
except HTTPError as e:
print(e)
pass
else:
ready = []
for req in info.findall('staged_requests/request'):
ready.append('{}[{}]'.format(Fore.CYAN + req.get('package') + Fore.RESET, req.get('id')))
if len(ready):
print(query_project, Fore.GREEN + 'ready:', ', '.join(ready))
def check_adi_projects(self): def check_adi_projects(self):
for p in self.api.get_adi_projects(): for p in self.api.get_adi_projects():

View File

@ -20,6 +20,7 @@ from osc.core import show_package_meta
from osc.core import buildlog_strip_time from osc.core import buildlog_strip_time
from osc.core import change_review_state from osc.core import change_review_state
from osc.core import delete_package from osc.core import delete_package
from osc.core import delete_project
from osc.core import get_commitlog from osc.core import get_commitlog
from osc.core import get_group from osc.core import get_group
from osc.core import get_request from osc.core import get_request
@ -70,6 +71,7 @@ class StagingAPI(object):
self._package_metas = dict() self._package_metas = dict()
self._supersede = False self._supersede = False
self._package_disabled = {} self._package_disabled = {}
self._is_staging_manager = None
Cache.init() Cache.init()
@ -146,6 +148,12 @@ class StagingAPI(object):
xpath = 'repository[@name="images"]' xpath = 'repository[@name="images"]'
return len(meta.xpath(xpath)) > 0 return len(meta.xpath(xpath)) > 0
@property
def is_staging_manager(self):
if self._is_staging_manager is None:
self._is_staging_manager = self.is_user_member_of(self.user, self.cstaging_group)
return self._is_staging_manager
def makeurl(self, l, query=None): def makeurl(self, l, query=None):
""" """
Wrapper around osc's makeurl passing our apiurl Wrapper around osc's makeurl passing our apiurl
@ -1249,7 +1257,10 @@ class StagingAPI(object):
root = self.project_status(project, reload=True) root = self.project_status(project, reload=True)
if root.get('state') == 'empty': if root.get('state') == 'empty':
# Cleanup like accept since the staging is now empty. # Cleanup like accept since the staging is now empty.
self.staging_deactivate(project) if self.is_adi_project(project):
self.api.delete_empty_adi_project(project)
else:
self.staging_deactivate(project)
else: else:
self.build_switch_staging_project(project, 'enable') self.build_switch_staging_project(project, 'enable')
@ -1484,3 +1495,16 @@ class StagingAPI(object):
return meta.find(xpath) is not None return meta.find(xpath) is not None
return False return False
def delete_empty_adi_project(self, project):
if not self.is_adi_project(project):
return
if not self.is_staging_manager:
return
try:
delete_project(self.apiurl, project, force=True)
except HTTPError as e:
print(e)
pass