Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2021-07-29 21:31:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Thu Jul 29 21:31:59 2021 rev:312 rq:909147 version:20210729.455dc99c

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2021-07-24 20:39:16.116407545 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1899/openSUSE-release-tools.changes
  2021-07-29 21:33:06.940685973 +0200
@@ -1,0 +2,9 @@
+Thu Jul 29 10:49:18 UTC 2021 - opensuse-releaset...@opensuse.org
+
+- Update to version 20210729.455dc99c:
+  * Refactor code to split big method and improve doc
+  * Add test for inherit maintainer role
+  * Add note about explicit ignoring of inherited maintainership
+  * Avoid creation of duplicate add_role requests (fixes #2609)
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20210723.7e5bacec.obscpio

New:
----
  openSUSE-release-tools-20210729.455dc99c.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.IQNCtm/_old  2021-07-29 21:33:07.520685258 +0200
+++ /var/tmp/diff_new_pack.IQNCtm/_new  2021-07-29 21:33:07.524685254 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20210723.7e5bacec
+Version:        20210729.455dc99c
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.IQNCtm/_old  2021-07-29 21:33:07.564685205 +0200
+++ /var/tmp/diff_new_pack.IQNCtm/_new  2021-07-29 21:33:07.568685199 +0200
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">7e5bacec144b38e1f37116ad9e7ad943a324f02f</param>
+    <param 
name="changesrevision">c838245a377d88baed3e6e8b132d0db6a367b9b8</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20210723.7e5bacec.obscpio -> 
openSUSE-release-tools-20210729.455dc99c.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20210723.7e5bacec/check_source.py 
new/openSUSE-release-tools-20210729.455dc99c/check_source.py
--- old/openSUSE-release-tools-20210723.7e5bacec/check_source.py        
2021-07-23 09:28:59.000000000 +0200
+++ new/openSUSE-release-tools-20210729.455dc99c/check_source.py        
2021-07-29 12:48:27.000000000 +0200
@@ -25,6 +25,7 @@
 from osclib.core import target_archs
 from osclib.core import create_add_role_request
 from osc.core import show_project_meta
+from osc.core import get_request_list
 from urllib.error import HTTPError
 
 import ReviewBot
@@ -170,15 +171,9 @@
                 (self.required_maintainer, source_project)
             )
 
-            try:
-                add_role_msg = 'Created automatically from request %s' % 
self.request.reqid
-                add_role_reqid = create_add_role_request(self.apiurl, 
source_project, self.required_maintainer,
-                                                         'maintainer', 
message=add_role_msg)
-                declined_msg += ' Created the add_role request %s for 
addressing this problem.' % add_role_reqid
-            except HTTPError as e:
-                self.logger.error(
-                    'Cannot create the corresponding add_role request for %s: 
%s' % (self.request.reqid, e)
-                )
+            req = self.__ensure_add_role_request(source_project)
+            if req:
+                declined_msg += ' Created the add_role request %s for 
addressing this problem.' % req
 
             self.review_messages['declined'] = declined_msg
             return False
@@ -341,7 +336,8 @@
         """Checks whether the source project has the required maintainer
 
         If a 'required-source-maintainer' is set, it checks whether it is a
-        maintainer for the source project.
+        maintainer for the source project. Inherited maintainership is
+        intentionally ignored to have explicit maintainer set.
 
         source_project - source project name
         """
@@ -356,6 +352,33 @@
 
         return self.required_maintainer in maintainers
 
+    def __ensure_add_role_request(self, source_project):
+        """Returns add_role request ID for given source project. Creates that 
add role if needed."""
+        try:
+            add_roles = get_request_list(self.apiurl, source_project,
+                req_state=['new', 'review'], req_type='add_role')
+            add_roles = list(filter(self.__is_required_maintainer, add_roles))
+            if len(add_roles) > 0:
+                return add_roles[0].reqid
+            else:
+                add_role_msg = 'Created automatically from request %s' % 
self.request.reqid
+                return create_add_role_request(self.apiurl, source_project, 
self.required_maintainer,
+                                                        'maintainer', 
message=add_role_msg)
+        except HTTPError as e:
+            self.logger.error(
+                'Cannot create the corresponding add_role request for %s: %s' 
% (self.request.reqid, e)
+            )
+
+    def __is_required_maintainer(self, request):
+        """Returns true for add role requests that adds required maintainer 
user or group"""
+        action = request.actions[0]
+        user = self.required_maintainer
+        if user.startswith('group:'):
+            group = user.replace('group:', '')
+            return action.group_name == group and action.group_role == 
'maintainer'
+        else:
+            return action.person_name == user and action.person_role == 
'maintainer'
+
     @staticmethod
     def checkout_package(*args, **kwargs):
         _stdout = sys.stdout
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20210723.7e5bacec/tests/check_source_tests.py 
new/openSUSE-release-tools-20210729.455dc99c/tests/check_source_tests.py
--- old/openSUSE-release-tools-20210723.7e5bacec/tests/check_source_tests.py    
2021-07-23 09:28:59.000000000 +0200
+++ new/openSUSE-release-tools-20210729.455dc99c/tests/check_source_tests.py    
2021-07-29 12:48:27.000000000 +0200
@@ -80,28 +80,39 @@
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
     def test_no_source_maintainer(self):
-        """Declines the request when the 'required_maintainer' is not 
maintainer of the source project"""
+        """Declines the request when the 'required_maintainer' is not 
maintainer of the source project
+
+          Create also request to add required maintainers to source project 
unless it is already open
+        """
         self._setup_devel_project()
 
         # Change the required maintainer
         self.wf.create_group(FACTORY_MAINTAINERS.replace('group:', ''))
         self.wf.remote_config_set({ 'required-source-maintainer': 
FACTORY_MAINTAINERS })
 
-        req_id = self.wf.create_submit_request(SRC_PROJECT, 'blowfish').reqid
+        req = self.wf.create_submit_request(SRC_PROJECT, 'blowfish')
 
-        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+        self.assertReview(req.reqid, by_user=(self.bot_user, 'new'))
 
-        self.review_bot.set_request_ids([req_id])
+        self.review_bot.set_request_ids([req.reqid])
         self.review_bot.check_requests()
 
-        review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
+        review = self.assertReview(req.reqid, by_user=(self.bot_user, 
'declined'))
         add_role_req = get_request_list(self.wf.apiurl, SRC_PROJECT, 
req_state=['new'], req_type='add_role')[0]
 
         self.assertIn('unless %s is a maintainer of %s' % 
(FACTORY_MAINTAINERS, SRC_PROJECT), review.comment)
         self.assertIn('Created the add_role request %s' % add_role_req.reqid, 
review.comment)
 
         self.assertEqual(add_role_req.actions[0].tgt_project, SRC_PROJECT)
-        self.assertEqual('Created automatically from request %s' % req_id, 
add_role_req.description)
+        self.assertEqual('Created automatically from request %s' % req.reqid, 
add_role_req.description)
+
+        # reopen request and do it again to test that new add_role request 
won't be created
+        req.change_state('new')
+
+        self.review_bot.check_requests()
+        add_role_reqs = get_request_list(self.wf.apiurl, SRC_PROJECT, 
req_state=['new'], req_type='add_role')
+
+        self.assertEqual(len(add_role_reqs), 1)
 
     def test_source_maintainer(self):
         """Accepts the request when the 'required_maintainer' is a group and 
is a maintainer for the project"""
@@ -121,6 +132,34 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    def test_source_inherited_maintainer(self):
+        """Declines the request when the 'required_maintainer' is only 
inherited maintainer of the source project"""
+        # Change the required maintainer
+        group_name = FACTORY_MAINTAINERS.replace('group:', '')
+        self.wf.create_group(group_name)
+        self.wf.remote_config_set({ 'required-source-maintainer': 
FACTORY_MAINTAINERS })
+
+        root_project = self.wf.create_project(SRC_PROJECT.rsplit(':', 1)[0],
+            maintainer={'groups': [group_name]})
+
+        self._setup_devel_project()
+
+        req = self.wf.create_submit_request(SRC_PROJECT, 'blowfish')
+
+        self.assertReview(req.reqid, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req.reqid])
+        self.review_bot.check_requests()
+
+        review = self.assertReview(req.reqid, by_user=(self.bot_user, 
'declined'))
+        add_role_req = get_request_list(self.wf.apiurl, SRC_PROJECT, 
req_state=['new'], req_type='add_role')[0]
+
+        self.assertIn('unless %s is a maintainer of %s' % 
(FACTORY_MAINTAINERS, SRC_PROJECT), review.comment)
+        self.assertIn('Created the add_role request %s' % add_role_req.reqid, 
review.comment)
+
+        self.assertEqual(add_role_req.actions[0].tgt_project, SRC_PROJECT)
+        self.assertEqual('Created automatically from request %s' % req.reqid, 
add_role_req.description)
+
     def _setup_devel_project(self, maintainer={}):
         devel_project = self.wf.create_project(SRC_PROJECT, 
maintainer=maintainer)
         devel_package = OBSLocal.Package('blowfish', project=devel_project)

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.IQNCtm/_old  2021-07-29 21:33:08.196684426 +0200
+++ /var/tmp/diff_new_pack.IQNCtm/_new  2021-07-29 21:33:08.196684426 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20210723.7e5bacec
-mtime: 1627025339
-commit: 7e5bacec144b38e1f37116ad9e7ad943a324f02f
+version: 20210729.455dc99c
+mtime: 1627555707
+commit: 455dc99c10beb8e109a8439d52c4c500da6fc26d
 

Reply via email to