From 646ce308d7fd823443b30e3121a60652f759b32e Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Wed, 9 Jan 2019 12:58:54 +0100 Subject: [PATCH] Only decline delete requests that affect linked packages within the target This decline reason came from https://github.com/openSUSE/openSUSE-release-tools/pull/603 without much more context, so I'm guessing it's about delete requests for e.g. kernel-default that should delete kernel-source Packages that link to *other* projects basically do not exist in openSUSE distributions but are very common in SLE service packs, so we need to diff on this. Fixes #1824 --- check_source.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/check_source.py b/check_source.py index 18e11651..aaa33859 100755 --- a/check_source.py +++ b/check_source.py @@ -279,22 +279,26 @@ class CheckSource(ReviewBot.ReviewBot): self.review_messages['declined'] = "There is a pending request %s to %s/%s in process." % (','.join(ids), action.tgt_project, action.tgt_package) return False - # Decline the delete request against linked package. - links = root.findall('sourceinfo/linked') - if links is None or len(links) == 0: - if not self.ignore_devel: - self.devel_project_review_ensure(request, action.tgt_project, action.tgt_package) - - if not self.skip_add_reviews and self.repo_checker is not None: - self.add_review(self.request, by_user=self.repo_checker, msg='Is this delete request safe?') - return True - else: - linked = links[0] - linked_project = linked.get('project') - linked_package = linked.get('package') - self.review_messages['declined'] = "This is an incorrect request, it's a linked package to %s/%s" % (linked_project, linked_package) + # Decline delete requests against linked flavor package + linked = root.find('sourceinfo/linked') + if not (linked is None or self.check_linked_package(action, linked)): return False + if not self.ignore_devel: + self.devel_project_review_ensure(request, action.tgt_project, action.tgt_package) + + if not self.skip_add_reviews and self.repo_checker is not None: + self.add_review(self.request, by_user=self.repo_checker, msg='Is this delete request safe?') + + return True + + def check_linked_package(self, action, linked): + if linked.get('project', action.tgt_project) != action.tgt_project: + return True + linked_package = linked.get('package') + self.review_messages['declined'] = "Delete the package %s instead" % (linked_package) + return False + def check_action_delete_project(self, request, action): # Presumably if the request is valid the bot should be disabled or # overridden, but seems like no valid case for allowing this (see #1696).