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