Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2018-03-08 11:00:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Thu Mar  8 11:00:06 2018 rev:66 rq:584104 version:20180307.d30db7e

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2018-03-07 10:40:05.066776805 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2018-03-08 11:00:22.299106798 +0100
@@ -1,0 +2,11 @@
+Wed Mar 07 19:49:21 UTC 2018 - opensuse-releaset...@opensuse.org
+
+- Update to version 20180307.d30db7e:
+  * repo_checker: provide comment command to skip-cycle for group.
+  * repo_checker: utilize ReviewBot.comment_api instead of new instance.
+  * ReviewBot: provide comment command override.
+  * osclib/core: maintainers_get(): utilize new group_members() function.
+  * osclib/core: provide group_members() function.
+  * osclib/comments: provide command_find() for comment commands.
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20180306.a9ec91f.obscpio

New:
----
  openSUSE-release-tools-20180307.d30db7e.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.MGE4fy/_old  2018-03-08 11:00:24.095041887 +0100
+++ /var/tmp/diff_new_pack.MGE4fy/_new  2018-03-08 11:00:24.099041743 +0100
@@ -20,7 +20,7 @@
 %define source_dir osc-plugin-factory
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20180306.a9ec91f
+Version:        20180307.d30db7e
 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.MGE4fy/_old  2018-03-08 11:00:24.147040009 +0100
+++ /var/tmp/diff_new_pack.MGE4fy/_new  2018-03-08 11:00:24.147040009 +0100
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/osc-plugin-factory.git</param>
-    <param 
name="changesrevision">3c25b8a8a4984d28b04b3b94871cfa427138f298</param>
+    <param 
name="changesrevision">d30db7eb1d8572d7bb8aae01fca9a0e92228904b</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20180306.a9ec91f.obscpio -> 
openSUSE-release-tools-20180307.d30db7e.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20180306.a9ec91f/ReviewBot.py 
new/openSUSE-release-tools-20180307.d30db7e/ReviewBot.py
--- old/openSUSE-release-tools-20180306.a9ec91f/ReviewBot.py    2018-03-06 
21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/ReviewBot.py    2018-03-07 
20:41:31.000000000 +0100
@@ -28,6 +28,7 @@
 from collections import OrderedDict
 from osclib.comments import CommentAPI
 from osclib.conf import Config
+from osclib.core import group_members
 from osclib.memoize import memoize
 from osclib.stagingapi import StagingAPI
 import signal
@@ -84,6 +85,8 @@
         self.only_one_action = False
         self.request_default_return = None
         self.comment_handler = False
+        self.override_allow = True
+        self.override_group_key = 
'{}-override-group'.format(self.bot_name.lower())
 
         self.load_config()
 
@@ -141,7 +144,12 @@
         for req in self.requests:
             self.logger.info("checking %s"%req.reqid)
             self.request = req
-            good = self.check_one_request(req)
+
+            override = self.request_override_check(req)
+            if override is not None:
+                good = override
+            else:
+                good = self.check_one_request(req)
 
             if self.review_mode == 'no':
                 good = None
@@ -155,6 +163,40 @@
             elif self.review_mode != 'accept-onpass':
                 self._set_review(req, 'declined')
 
+    @memoize(session=True)
+    def request_override_check_users(self, project):
+        """Determine users allowed to override review in a comment command."""
+        self.staging_api(project)
+        config = self.staging_config[project]
+
+        users = group_members(self.apiurl, config['staging-group'])
+
+        if self.override_group_key:
+            override_group = config.get(self.override_group_key)
+            if override_group:
+                users += group_members(self.apiurl, override_group)
+
+        return users
+
+    def request_override_check(self, request):
+        """Check for a comment command requesting review override."""
+        if not self.override_allow:
+            return None
+
+        comments = self.comment_api.get_comments(request_id=request.reqid)
+        users = 
self.request_override_check_users(request.actions[0].tgt_project)
+        for args, who in self.comment_api.command_find(
+            comments, self.review_user, 'override', users):
+            message = 'overridden by {}'.format(who)
+            override = args[1] or None
+            if override == 'accept':
+                self.review_messages['accepted'] = message
+                return True
+
+            if override == 'decline':
+                self.review_messages['declined'] = message
+                return False
+
     def _set_review(self, req, state):
         doit = self.can_accept_review(req.reqid)
         if doit is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/legal-auto.py 
new/openSUSE-release-tools-20180307.d30db7e/legal-auto.py
--- old/openSUSE-release-tools-20180306.a9ec91f/legal-auto.py   2018-03-06 
21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/legal-auto.py   2018-03-07 
20:41:31.000000000 +0100
@@ -59,6 +59,7 @@
             self.apinick = 'ibs#'
         else:
             self.apinick = 'obs#'
+        self.override_allow = False # Handled via external tool.
 
     def request_priority(self):
         prio = self.request.priority or 'moderate'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/osclib/comments.py 
new/openSUSE-release-tools-20180307.d30db7e/osclib/comments.py
--- old/openSUSE-release-tools-20180306.a9ec91f/osclib/comments.py      
2018-03-06 21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/osclib/comments.py      
2018-03-07 20:41:31.000000000 +0100
@@ -112,6 +112,33 @@
                 return c, info
         return None, None
 
+    def command_find(self, comments, user, command=None, who_allowed=None):
+        """
+        Find comment commands with the optional conditions.
+
+        Usage (in comment):
+            @<user> <command> [args...]
+        """
+        command_re = re.compile(r'^@(?P<user>[^ ]+) (?P<args>.*)$')
+
+        # Search for commands in the order the comment was created.
+        for comment in sorted(comments.values(), key=lambda c: c['when']):
+            if who_allowed and comment['who'] not in who_allowed:
+                continue
+
+            match = command_re.search(comment['comment'])
+            if not match:
+                continue
+
+            if match.group('user') != user:
+                continue
+
+            args = match.group('args').strip().split(' ')
+            if command and (args[0] or None) != command:
+                continue
+
+            yield args, comment['who']
+
     def add_marker(self, comment, bot, info=None):
         """Add bot marker to comment that can be used to find comment."""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/osclib/conf.py 
new/openSUSE-release-tools-20180307.d30db7e/osclib/conf.py
--- old/openSUSE-release-tools-20180306.a9ec91f/osclib/conf.py  2018-03-06 
21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/osclib/conf.py  2018-03-07 
20:41:31.000000000 +0100
@@ -67,6 +67,7 @@
         'openqa': 'https://openqa.opensuse.org',
         'lock': 'openSUSE:%(project)s:Staging',
         'lock-ns': 'openSUSE',
+        'leaper-override-group': 'leap-reviewers',
         'delreq-review': None,
         'main-repo': 'standard',
         'download-baseurl': 
'http://download.opensuse.org/distribution/leap/%(version)s/',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/osclib/core.py 
new/openSUSE-release-tools-20180307.d30db7e/osclib/core.py
--- old/openSUSE-release-tools-20180306.a9ec91f/osclib/core.py  2018-03-06 
21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/osclib/core.py  2018-03-07 
20:41:31.000000000 +0100
@@ -20,6 +20,15 @@
 RPM_REGEX = BINARY_REGEX + '\.rpm'
 BinaryParsed = namedtuple('BinaryParsed', ('package', 'filename', 'name', 
'arch'))
 
+@memoize(session=True)
+def group_members(apiurl, group, maintainers=False):
+    url = makeurl(apiurl, ['group', group])
+    root = ETL.parse(http_GET(url)).getroot()
+
+    if maintainers:
+        return root.xpath('maintainer/@userid')
+
+    return root.xpath('person/person/@userid')
 
 @memoize(session=True)
 def owner_fallback(apiurl, project, package):
@@ -40,9 +49,7 @@
     maintainers = [p.get('name') for p in root.findall('.//person') if 
p.get('role') == 'maintainer']
     if not maintainers:
         for group in [p.get('name') for p in root.findall('.//group') if 
p.get('role') == 'maintainer']:
-            url = makeurl(apiurl, ('group', group))
-            root = ET.parse(http_GET(url)).getroot()
-            maintainers = maintainers + [p.get('userid') for p in 
root.findall('./person/person')]
+            maintainers = maintainers + group_members(apiurl, group)
     return maintainers
 
 @memoize(session=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/repo_checker.py 
new/openSUSE-release-tools-20180307.d30db7e/repo_checker.py
--- old/openSUSE-release-tools-20180306.a9ec91f/repo_checker.py 2018-03-06 
21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/repo_checker.py 2018-03-07 
20:41:31.000000000 +0100
@@ -121,6 +121,7 @@
         self.requests_map = {}
         self.groups = {}
         self.groups_build = {}
+        self.groups_skip_cycle = []
 
         # Manipulated in ensure_group().
         self.group = None
@@ -181,12 +182,19 @@
                 self.groups_build[group] = 
hashlib.sha1(''.join(builds)).hexdigest()[:7]
 
                 # Determine if build has changed since last comment.
-                comment_api = CommentAPI(api.apiurl)
-                comments = comment_api.get_comments(project_name=group)
-                _, info = comment_api.comment_find(comments, self.bot_name)
+                comments = self.comment_api.get_comments(project_name=group)
+                _, info = self.comment_api.comment_find(comments, 
self.bot_name)
                 if info and self.groups_build[group] == info.get('build'):
                     skip_build.add(group)
 
+                # Look for skip-cycle comment command.
+                users = 
self.request_override_check_users(request.actions[0].tgt_project)
+                for _, who in self.comment_api.command_find(
+                    comments, self.review_user, 'skip-cycle', users):
+                    self.logger.debug('comment command: skip-cycle by 
{}'.format(who))
+                    self.groups_skip_cycle.append(group)
+                    break
+
             if not self.force and group in skip_build:
                 self.logger.debug('{}: {} build 
unchanged'.format(request.reqid, group))
                 continue
@@ -419,8 +427,8 @@
             yield InstallSection(section, text)
 
     def cycle_check(self, project, stagings, arch):
-        if self.skip_cycle:
-            self.logger.info('cycle check: skip due to --skip-cycle')
+        if self.skip_cycle or self.group in self.groups_skip_cycle:
+            self.logger.info('cycle check: skip due to --skip-cycle or comment 
command')
             return CheckResult(True, None)
 
         self.logger.info('cycle check: start')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/tests/checktags_tests.py 
new/openSUSE-release-tools-20180307.d30db7e/tests/checktags_tests.py
--- old/openSUSE-release-tools-20180306.a9ec91f/tests/checktags_tests.py        
2018-03-06 21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/tests/checktags_tests.py        
2018-03-07 20:41:31.000000000 +0100
@@ -60,6 +60,7 @@
         self.checker = TagChecker(apiurl=APIURL,
                                   user='maintbot',
                                   logger=self.logger)
+        self.checker.override_allow = False # Test setup cannot handle.
 
         self._request_data = """
                 <request id="293129" creator="darix">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/tests/factory_source_tests.py 
new/openSUSE-release-tools-20180307.d30db7e/tests/factory_source_tests.py
--- old/openSUSE-release-tools-20180306.a9ec91f/tests/factory_source_tests.py   
2018-03-06 21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/tests/factory_source_tests.py   
2018-03-07 20:41:31.000000000 +0100
@@ -57,6 +57,7 @@
         self.checker = FactorySourceChecker(apiurl = APIURL, \
                 user = 'factory-source', \
                 logger = self.logger)
+        self.checker.override_allow = False # Test setup cannot handle.
 
     def test_accept_request(self):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180306.a9ec91f/tests/maintenance_tests.py 
new/openSUSE-release-tools-20180307.d30db7e/tests/maintenance_tests.py
--- old/openSUSE-release-tools-20180306.a9ec91f/tests/maintenance_tests.py      
2018-03-06 21:47:31.000000000 +0100
+++ new/openSUSE-release-tools-20180307.d30db7e/tests/maintenance_tests.py      
2018-03-07 20:41:31.000000000 +0100
@@ -55,6 +55,7 @@
         self.checker = MaintenanceChecker(apiurl = APIURL, \
                 user = 'maintbot', \
                 logger = self.logger)
+        self.checker.override_allow = False # Test setup cannot handle.
 
     def test_non_maintainer_submit(self):
         """same as above but already has devel project as reviewer

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.MGE4fy/_old  2018-03-08 11:00:25.047007481 +0100
+++ /var/tmp/diff_new_pack.MGE4fy/_new  2018-03-08 11:00:25.051007336 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20180306.a9ec91f
-mtime: 1520369251
-commit: a9ec91f3a82884106491d8c6d4bc6624f813a38c
+version: 20180307.d30db7e
+mtime: 1520451691
+commit: d30db7eb1d8572d7bb8aae01fca9a0e92228904b
 


Reply via email to