From b60333075a36715677f69e801fd4247d647348ec Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Fri, 6 Dec 2019 07:35:38 +0100 Subject: [PATCH] Delete adi projects whenever we'd build disable them --- osclib/accept_command.py | 4 ++++ osclib/adi_command.py | 37 +++++++++++-------------------------- osclib/stagingapi.py | 26 +++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/osclib/accept_command.py b/osclib/accept_command.py index 26091f79..fb72380a 100644 --- a/osclib/accept_command.py +++ b/osclib/accept_command.py @@ -116,6 +116,10 @@ class AcceptCommand(object): time.sleep(1) 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.reset_rebuild_data(prj) diff --git a/osclib/adi_command.py b/osclib/adi_command.py index ee97b89a..c2c5f4c5 100644 --- a/osclib/adi_command.py +++ b/osclib/adi_command.py @@ -5,7 +5,6 @@ from colorama import Fore from osc import oscerr from osc.core import get_request -from osc.core import delete_project from osc.core import show_package_meta from osc import conf @@ -56,33 +55,19 @@ class AdiCommand: return 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') - # no longer accept/delete adi projects - return - - if self.api.is_user_member_of(self.api.user, self.api.cstaging_group): - print(query_project + ' ' + Fore.GREEN + '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)) + 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): for p in self.api.get_adi_projects(): diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index 29999e7a..2a8bff9f 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -20,6 +20,7 @@ from osc.core import show_package_meta from osc.core import buildlog_strip_time from osc.core import change_review_state from osc.core import delete_package +from osc.core import delete_project from osc.core import get_commitlog from osc.core import get_group from osc.core import get_request @@ -70,6 +71,7 @@ class StagingAPI(object): self._package_metas = dict() self._supersede = False self._package_disabled = {} + self._is_staging_manager = None Cache.init() @@ -146,6 +148,12 @@ class StagingAPI(object): xpath = 'repository[@name="images"]' 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): """ Wrapper around osc's makeurl passing our apiurl @@ -1249,7 +1257,10 @@ class StagingAPI(object): root = self.project_status(project, reload=True) if root.get('state') == '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: self.build_switch_staging_project(project, 'enable') @@ -1484,3 +1495,16 @@ class StagingAPI(object): return meta.find(xpath) is not None 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