Hello community,

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

Package is "openSUSE-release-tools"

Tue Jun 19 12:00:40 2018 rev:103 rq:616654 version:20180614.3b99137

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2018-06-08 23:15:53.799129736 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2018-06-19 12:00:56.372100239 +0200
@@ -1,0 +2,18 @@
+Thu Jun 14 05:12:28 UTC 2018 - [email protected]
+
+- Update to version 20180614.3b99137:
+  * dist/ci/Dockerfile: add python2-pyOpenSSL as dependency.
+  * TTM: Add norelease option for use with OSD
+  * Refactor _check_project into ReviewBot
+  * Also release 000product:openSUSE-ftp-ftp-armv7hl for Leap 15.0 ports
+  * dist: Require python2-pika by totest-manager (new amqp dependency)
+  * legal-auto: autopep8
+  * Add retried_GET
+  * Do not pass md5 but revision
+  * Use UTC for created
+  * Add project sub command to legal auto
+  * pkglistgen: log unsorted locale packages
+  * update-crawler: also log where requests came from
+  * Handle armv6/armv7 with totest manager as well
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20180604.ce0a143.obscpio

New:
----
  openSUSE-release-tools-20180614.3b99137.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.ueawa2/_old  2018-06-19 12:00:57.384062666 +0200
+++ /var/tmp/diff_new_pack.ueawa2/_new  2018-06-19 12:00:57.388062517 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20180604.ce0a143
+Version:        20180614.3b99137
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT
@@ -202,6 +202,7 @@
 # TODO Update requirements.
 Requires:       osclib = %{version}
 Requires:       python-openqa_client
+Requires:       python2-pika
 
 %description totest-manager
 Manages product ToTest repository workflow and openQA interaction

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.ueawa2/_old  2018-06-19 12:00:57.452060141 +0200
+++ /var/tmp/diff_new_pack.ueawa2/_new  2018-06-19 12:00:57.452060141 +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">f728cea30b605621e2103acb591f248371f23091</param>
+    <param 
name="changesrevision">c3df9508696dbca3b8e0835704814442ac1871dc</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20180604.ce0a143.obscpio -> 
openSUSE-release-tools-20180614.3b99137.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20180604.ce0a143/ReviewBot.py 
new/openSUSE-release-tools-20180614.3b99137/ReviewBot.py
--- old/openSUSE-release-tools-20180604.ce0a143/ReviewBot.py    2018-06-04 
22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/ReviewBot.py    2018-06-14 
07:05:13.000000000 +0200
@@ -45,6 +45,8 @@
 from osc import conf
 import osc.core
 import urllib2
+from itertools import count
+
 
 class ReviewBot(object):
     """
@@ -574,6 +576,50 @@
 
         self.comment_handler_remove()
 
+    def _check_matching_srcmd5(self, project, package, rev, history_limit = 5):
+        """check if factory sources contain the package and revision. check 
head and history"""
+        self.logger.debug("checking %s in %s"%(package, project))
+        try:
+            si = osc.core.show_package_meta(self.apiurl, project, package)
+        except (urllib2.HTTPError, urllib2.URLError):
+            si = None
+        if si is None:
+            self.logger.debug("new package")
+            return None
+        else:
+            si = self.get_sourceinfo(project, package)
+            if rev == si.verifymd5:
+                self.logger.debug("srcmd5 matches")
+                return True
+
+        if history_limit:
+            self.logger.debug("%s not the latest version, checking history", 
rev)
+            u = osc.core.makeurl(self.apiurl, [ 'source', project, package, 
'_history' ], { 'limit': history_limit })
+            try:
+                r = osc.core.http_GET(u)
+            except urllib2.HTTPError as e:
+                self.logger.debug("package has no history!?")
+                return None
+
+            root = ET.parse(r).getroot()
+            # we need this complicated construct as obs doesn't honor
+            # the 'limit' parameter use above for obs interconnect:
+            # https://github.com/openSUSE/open-build-service/issues/2545
+            for revision, i in zip(reversed(root.findall('revision')), 
count()):
+                node = revision.find('srcmd5')
+                if node is None:
+                    continue
+                self.logger.debug("checking %s"%node.text)
+                if node.text == rev:
+                    self.logger.debug("got it, rev %s"%revision.get('rev'))
+                    return True
+                if i == history_limit:
+                    break
+
+            self.logger.debug("srcmd5 not found in history either")
+
+        return False
+
 
 class CommentFromLogHandler(logging.Handler):
     def __init__(self, level=logging.INFO):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/check_source_in_factory.py 
new/openSUSE-release-tools-20180614.3b99137/check_source_in_factory.py
--- old/openSUSE-release-tools-20180604.ce0a143/check_source_in_factory.py      
2018-06-04 22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/check_source_in_factory.py      
2018-06-14 07:05:13.000000000 +0200
@@ -35,7 +35,6 @@
 import urllib2
 import yaml
 import ReviewBot
-from itertools import count
 
 
 class FactorySourceChecker(ReviewBot.ReviewBot):
@@ -77,7 +76,7 @@
         self.review_messages['declined'] = 'the package needs to be accepted 
in {} first'.format(' or '.join(projects))
         for project in projects:
             self.logger.info("Checking in project %s" % project)
-            good = self._check_project(project, target_package, 
src_srcinfo.verifymd5)
+            good = self._check_matching_srcmd5(project, target_package, 
src_srcinfo.verifymd5, self.history_limit)
             if good:
                 self.logger.info("{} is in {}".format(target_package, project))
                 return good
@@ -103,48 +102,6 @@
 
         return projects
 
-    def _check_project(self, project, package, rev):
-        """check if factory sources contain the package and revision. check 
head and history"""
-        self.logger.debug("checking %s in %s"%(package, project))
-        try:
-            si = osc.core.show_package_meta(self.apiurl, project, package)
-        except (urllib2.HTTPError, urllib2.URLError):
-            si = None
-        if si is None:
-            self.logger.debug("new package")
-            return None
-        else:
-            si = self.get_sourceinfo(project, package)
-            if rev == si.verifymd5:
-                self.logger.debug("srcmd5 matches")
-                return True
-
-        self.logger.debug("%s not the latest version, checking history", rev)
-        u = osc.core.makeurl(self.apiurl, [ 'source', project, package, 
'_history' ], { 'limit': self.history_limit })
-        try:
-            r = osc.core.http_GET(u)
-        except urllib2.HTTPError as e:
-            self.logger.debug("package has no history!?")
-            return None
-
-        root = ET.parse(r).getroot()
-        # we need this complicated construct as obs doesn't honor
-        # the 'limit' parameter use above for obs interconnect:
-        # https://github.com/openSUSE/open-build-service/issues/2545
-        for revision, i in zip(reversed(root.findall('revision')), count()):
-            node = revision.find('srcmd5')
-            if node is None:
-                continue
-            self.logger.debug("checking %s"%node.text)
-            if node.text == rev:
-                self.logger.debug("got it, rev %s"%revision.get('rev'))
-                return True
-            if i == self.history_limit:
-                break
-
-        self.logger.debug("srcmd5 not found in history either")
-        return False
-
     def _check_requests(self, project, package, rev):
         self.logger.debug("checking requests")
         prjprefix = ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/dist/ci/Dockerfile 
new/openSUSE-release-tools-20180614.3b99137/dist/ci/Dockerfile
--- old/openSUSE-release-tools-20180604.ce0a143/dist/ci/Dockerfile      
2018-06-04 22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/dist/ci/Dockerfile      
2018-06-14 07:05:13.000000000 +0200
@@ -12,6 +12,7 @@
   obs-service-* \
   osc \
   python-packaging \
+  python2-pyOpenSSL \
   sudo
 
 # `osc build` directories that are effective to cache:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/dist/package/openSUSE-release-tools.spec
 
new/openSUSE-release-tools-20180614.3b99137/dist/package/openSUSE-release-tools.spec
--- 
old/openSUSE-release-tools-20180604.ce0a143/dist/package/openSUSE-release-tools.spec
        2018-06-04 22:09:07.000000000 +0200
+++ 
new/openSUSE-release-tools-20180614.3b99137/dist/package/openSUSE-release-tools.spec
        2018-06-14 07:05:13.000000000 +0200
@@ -202,6 +202,7 @@
 # TODO Update requirements.
 Requires:       osclib = %{version}
 Requires:       python-openqa_client
+Requires:       python2-pika
 
 %description totest-manager
 Manages product ToTest repository workflow and openQA interaction
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20180604.ce0a143/leaper.py 
new/openSUSE-release-tools-20180614.3b99137/leaper.py
--- old/openSUSE-release-tools-20180604.ce0a143/leaper.py       2018-06-04 
22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/leaper.py       2018-06-14 
07:05:13.000000000 +0200
@@ -186,7 +186,7 @@
                 if devel_package is None:
                     devel_package = package
                 if self.is_package_in_project(devel_project, devel_package):
-                    if self.factory._check_project(devel_project, 
devel_package, src_srcinfo.verifymd5) == True:
+                    if self._check_matching_srcmd5(devel_project, 
devel_package, src_srcinfo.verifymd5) == True:
                         self.logger.info('matching sources in 
{}/{}'.format(devel_project, devel_package))
                         return True
                     else:
@@ -266,7 +266,7 @@
                     return True
                 # submitted from elsewhere but is in :Update
                 else:
-                    good = 
self.factory._check_project('openSUSE:Leap:15.0:Update', target_package, 
src_srcinfo.verifymd5)
+                    good = 
self._check_matching_srcmd5('openSUSE:Leap:15.0:Update', target_package, 
src_srcinfo.verifymd5)
                     if good:
                         self.logger.info("submission found in 15.0")
                         return good
@@ -285,7 +285,7 @@
                     if oldorigin.startswith('openSUSE:Factory'):
                         # check if an attempt to switch to SLE package is made
                         for sp in ('SP1:GA', 'SP1:Update'):
-                            good = 
self.factory._check_project('SUSE:SLE-15-{}'.format(sp), target_package, 
src_srcinfo.verifymd5)
+                            good = 
self._check_matching_srcmd5('SUSE:SLE-15-{}'.format(sp), target_package, 
src_srcinfo.verifymd5)
                             if good:
                                 self.logger.info("request sources come from 
SLE")
                                 self.needs_release_manager = True
@@ -305,7 +305,7 @@
                     prj = 'openSUSE:Leap:{}:SLE-workarounds'.format(v)
                     if self.is_package_in_project( prj, target_package):
                         self.logger.info("found package in %s", prj)
-                        if not self.factory._check_project(prj,
+                        if not self._check_matching_srcmd5(prj,
                                 target_package,
                                 src_srcinfo.verifymd5):
                             self.logger.info("sources in %s are NOT identical",
@@ -413,7 +413,7 @@
     def _check_factory(self, target_package, src_srcinfo, 
target_project='openSUSE:Factory'):
         for subprj in ('', ':NonFree', ':Live'):
             prj = ''.join((target_project, subprj))
-            good = self.factory._check_project(prj, target_package, 
src_srcinfo.verifymd5)
+            good = self._check_matching_srcmd5(prj, target_package, 
src_srcinfo.verifymd5)
             if good:
                 return good
             good = self.factory._check_requests(prj, target_package, 
src_srcinfo.verifymd5)
@@ -424,7 +424,7 @@
         return False
 
     def _check_project_and_request(self, project, target_package, src_srcinfo):
-        good = self.factory._check_project(project, target_package, 
src_srcinfo.verifymd5)
+        good = self._check_matching_srcmd5(project, target_package, 
src_srcinfo.verifymd5)
         if good:
             return good
         good = self.factory._check_requests(project, target_package, 
src_srcinfo.verifymd5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/legal-auto.py 
new/openSUSE-release-tools-20180614.3b99137/legal-auto.py
--- old/openSUSE-release-tools-20180604.ce0a143/legal-auto.py   2018-06-04 
22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/legal-auto.py   2018-06-14 
07:05:13.000000000 +0200
@@ -31,37 +31,54 @@
 import cmdln
 import requests as REQ
 import json
+import time
+import urllib2
 
 try:
     from xml.etree import cElementTree as ET
 except ImportError:
     import cElementTree as ET
 
+try:
+    import cPickle as pickle
+except:
+    import pickle
+
 import osc.conf
 import osc.core
 import ReviewBot
 
 from osclib.comments import CommentAPI
 
+http_GET = osc.core.http_GET
+
 
 class LegalAuto(ReviewBot.ReviewBot):
 
     def __init__(self, *args, **kwargs):
         ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
 
-        self.do_comments = True
         self.legaldb = None
         self.legaldb_headers = {}
-        self.commentapi = CommentAPI(self.apiurl)
         self.apinick = None
         self.message = None
         if self.ibs:
             self.apinick = 'ibs#'
         else:
             self.apinick = 'obs#'
-        self.override_allow = False # Handled via external tool.
+        self.override_allow = False  # Handled via external tool.
         self.request_default_return = True
 
+    def retried_GET(self, url):
+        try:
+            return http_GET(url)
+        except urllib2.HTTPError, e:
+            if 500 <= e.code <= 599:
+                print 'Retrying {}'.format(url)
+                time.sleep(1)
+                return self.retried_GET(url)
+            raise e
+
     def request_priority(self):
         prio = self.request.priority or 'moderate'
         prios = {'low': 1, 'moderate': 2, 'important': 3, 'critical': 4}
@@ -78,7 +95,7 @@
     def create_db_entry(self, src_project, src_package, src_rev):
         params = {'api': self.apiurl, 'project': src_project, 'package': 
src_package,
                   'external_link': self.request_nick(),
-                  'created': self.request.statehistory[0].when}
+                  'created': self.request.statehistory[0].when + ' UTC'}
         if src_rev:
             params['rev'] = src_rev
         url = osc.core.makeurl(self.legaldb, ['packages'], params)
@@ -96,6 +113,8 @@
         self.logger.info("%s/%s@%s -> %s/%s" % (src_project,
                                                 src_package, src_rev, 
target_project, target_package))
         to_review = self.open_reviews.get(self.request_nick(), None)
+        if to_review:
+            self.logger.info("Found " + json.dumps(to_review))
         to_review = to_review or self.create_db_entry(
             src_project, src_package, src_rev)
         if not to_review:
@@ -121,7 +140,7 @@
                 user = report.get('reviewing_user', None)
                 if not user:
                     self.message = 'declined'
-                    print self.message
+                    print("unacceptable without user %d" % report.get('id'))
                     return None
                 comment = report.get('result', None)
                 if comment:
@@ -129,16 +148,27 @@
                         user, comment)
                 else:
                     self.message = "@{} declined the legal report".format(user)
-                    print self.message
                     return None
                 return False
             # print url, json.dumps(report)
         self.message = 'ok'
         return True
 
+    def check_one_request(self, req):
+        self.message = None
+        result = super(LegalAuto, self).check_one_request(req)
+        if result is None and self.message is not None:
+            print(self.message, req.reqid)
+        return result
+
+    def check_action__default(self, req, a):
+        self.logger.error("unhandled request type %s" % a.type)
+        return True
+
     def prepare_review(self):
         url = osc.core.makeurl(self.legaldb, ['requests'])
-        req = REQ.get(url, headers=self.legaldb_headers).json()
+        req = REQ.get(url, headers=self.legaldb_headers)
+        req = req.json()
         self.open_reviews = {}
         requests = []
         for hash in req['requests']:
@@ -178,6 +208,108 @@
                                      by_user=self.review_user, 
message=self.message)
         self.delete_from_db(req.reqid)
 
+    def _pkl_path(self):
+        CACHE_DIR = os.path.expanduser('~/.cache/osc-plugin-factory')
+        return os.path.join(CACHE_DIR, 'legaldb')
+
+    def update_project(self, project):
+        try:
+            with open(self._pkl_path(), 'rb') as pkl_file:
+                self.pkg_cache = pickle.load(pkl_file)
+        except (IOError, EOFError):
+            self.pkg_cache = {}
+
+        self.packages = []
+        # we can't create packages for requests - we need a nonewpackages=1 
first
+        # self._query_requests(project)
+        self._query_sources(project)
+        self._save_pkl()
+        url = osc.core.makeurl(self.legaldb, ['products', project])
+        request = REQ.patch(url, headers=self.legaldb_headers, data={'id': 
self.packages}).json()
+
+    def _save_pkl(self):
+        pkl_file = open(self._pkl_path(), 'wb')
+        pickle.dump(self.pkg_cache, pkl_file)
+        pkl_file.close()
+
+    def _query_sources(self, project):
+        url = osc.core.makeurl(
+            self.apiurl, ['source', project], {'view': 'info'})
+        f = self.retried_GET(url)
+        root = ET.parse(f).getroot()
+        #root = ET.fromstring(open('prj.info').read())
+        for si in root.findall('sourceinfo'):
+            if si.findall('error'):
+                continue
+            package = si.get('package')
+            if ':' in package:
+                continue
+            if package == 'patchinfo' or package.startswith('patchinfo.'):
+                continue
+            # handle maintenance links - we only want the latest
+            match = re.match(r'(\S+)\.\d+$', package)
+            if match:
+                if si.find('filename').text == match.group(1) + '.spec':
+                    continue
+            match = re.match(r'(\S+)\.imported_\d+$', package)
+            if match:
+                continue
+            skip = False
+            for l in si.findall('linked'):
+                lpackage = l.get('package')
+                # strip sle11's .imported_ suffix
+                lpackage = re.sub(r'\.imported_\d+$', '', lpackage)
+                # check if the lpackage is origpackage.NUMBER
+                match = re.match(r'(\S+)\.\d+$', lpackage)
+                if match and match.group(1) == package:
+                    lpackage = package
+                if package != lpackage:
+                    print "SKIP", package, "it links to", lpackage
+                    skip = True
+                    break
+            if skip:
+                continue
+            self.packages.append(self._add_source(project, project, package, 
si.get('rev')))
+
+    def _query_requests(self, project):
+        match = "(state/@name='new' or state/@name='review') and 
(action/target/@project='{}')"
+        match = match.format(project)
+        url = osc.core.makeurl(
+            self.apiurl, ['search', 'request'], {'match': match})
+        f = osc.core.http_GET(url)
+        root = ET.parse(f).getroot()
+        for rq in root.findall('request'):
+            for a in rq.findall('action'):
+                if not a.attrib['type'] in ('submit', 'maintenance_incident'):
+                    continue
+                source = a.find('source')
+                revision = source.attrib.get('rev')
+                src_project = source.attrib['project']
+                package = source.attrib['package']
+                self._add_source(project, src_project, package, revision)
+
+    def _add_source(self, tproject, sproject, package, revision):
+        params = {'api': self.apiurl, 'project': sproject, 'package': package,
+                  'external_link': tproject}
+        if revision:
+            params['rev'] = revision
+        hkey = hash(json.dumps(params, sort_keys=True))
+        if hkey in self.pkg_cache:
+            return self.pkg_cache[hkey]
+
+        params['priority'] = 1
+        url = osc.core.makeurl(self.legaldb, ['packages'], params)
+
+        try:
+            obj = REQ.post(url, headers=self.legaldb_headers).json()
+        except:
+            return None
+        if not 'saved' in obj:
+            return None
+        print "PKG", tproject, sproject, package, revision, obj['saved']['id']
+        self.pkg_cache[hkey] = obj['saved']['id']
+        return self.pkg_cache[hkey]
+
 
 class CommandLineInterface(ReviewBot.CommandLineInterface):
 
@@ -188,24 +320,28 @@
     def get_optparser(self):
         parser = ReviewBot.CommandLineInterface.get_optparser(self)
 
-        parser.add_option("--no-comment", dest='comment', action="store_false",
-                          default=True, help="don't actually post comments to 
obs")
         parser.add_option("--legaldb", dest='legaldb', metavar='URL',
                           default='http://legaldb.suse.de', help="Use 
different legaldb deployment")
         parser.add_option("--token", dest='token', metavar='STRING',
                           default=False, help="Use token to authenticate")
         return parser
 
+    def do_project(self, subcmd, opts, *projects):
+        """${cmd_name}: Overloaded to create/update product
+        """
+        for project in projects:
+            self.checker.update_project(project)
+
     def setup_checker(self):
         if not self.options.user and not self.options.group:
             self.options.group = 'legal-auto'
         bot = ReviewBot.CommandLineInterface.setup_checker(self)
-        bot.do_comments = self.options.comment
         bot.legaldb = self.options.legaldb
         if self.options.token:
             bot.legaldb_headers['Authorization'] = 'Token ' + 
self.options.token
         return bot
 
+
 if __name__ == "__main__":
     requests_log = logging.getLogger("requests.packages.urllib3")
     requests_log.setLevel(logging.WARNING)
@@ -213,4 +349,3 @@
 
     app = CommandLineInterface()
     sys.exit(app.main())
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/pkglistgen.py 
new/openSUSE-release-tools-20180614.3b99137/pkglistgen.py
--- old/openSUSE-release-tools-20180604.ce0a143/pkglistgen.py   2018-06-04 
22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/pkglistgen.py   2018-06-14 
07:05:13.000000000 +0200
@@ -527,6 +527,7 @@
 
     def _check_supplements(self):
         tocheck = set()
+        tocheck_locales = set()
         for arch in self.architectures:
             pool = self._prepare_pool(arch)
             sel = pool.Selection()
@@ -539,6 +540,11 @@
                         if d.startswith('namespace:modalias') or 
d.startswith('namespace:filesystem'):
                             tocheck.add(s.name)
 
+            for l in self.locales:
+                i = pool.str2id('locale({})'.format(l))
+                for s in pool.whatprovides(i):
+                    tocheck_locales.add(s.name)
+
         all_grouped = set()
         for g in self.groups.values():
             if g.solved:
@@ -549,6 +555,9 @@
         for p in tocheck - all_grouped:
             logger.warn('package %s has supplements but is not grouped', p)
 
+        for p in tocheck_locales - all_grouped:
+            logger.warn('package %s provides supported locale but is not 
grouped', p)
+
     def _prepare_pool(self, arch):
         pool = solv.Pool()
         pool.setarch(arch)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/totest-manager.py 
new/openSUSE-release-tools-20180614.3b99137/totest-manager.py
--- old/openSUSE-release-tools-20180604.ce0a143/totest-manager.py       
2018-06-04 22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/totest-manager.py       
2018-06-14 07:05:13.000000000 +0200
@@ -54,7 +54,7 @@
     livecd_repo = 'images'
     livecd_archs = ['i586', 'x86_64']
 
-    def __init__(self, project, dryrun=False, api_url=None, 
openqa_server='https://openqa.opensuse.org', test_subproject=None):
+    def __init__(self, project, dryrun=False, norelease=False, api_url=None, 
openqa_server='https://openqa.opensuse.org', test_subproject=None):
         self.project = project
         self.dryrun = dryrun
         if not api_url:
@@ -351,9 +351,6 @@
             # meant to use the totest manager.
             if repo.get('repository') in ('ports', 'factory', 
'images_staging'):
                 continue
-            # ignore 32bit for now. We're only interesed in aarch64 here
-            if repo.get('arch') in ('armv6l', 'armv7l'):
-                continue
             if repo.get('dirty', '') == 'true':
                 logger.info('%s %s %s -> %s' % (repo.get('project'),
                                                 repo.get('repository'), 
repo.get('arch'), 'dirty'))
@@ -468,7 +465,7 @@
         baseurl = ['source', project, package]
 
         url = self.api.makeurl(baseurl, query=query)
-        if self.dryrun:
+        if self.dryrun or self.norelease:
             logger.info("release %s/%s (%s)" % (project, package, set_release))
         else:
             self.api.retried_POST(url)
@@ -487,14 +484,14 @@
     def update_totest(self, snapshot=None):
         release = 'Snapshot%s' % snapshot if snapshot else None
         logger.info('Updating snapshot %s' % snapshot)
-        if not self.dryrun:
+        if not (self.dryrun or self.norelease):
             self.api.switch_flag_in_prj(self.test_project, flag='publish', 
state='disable')
 
         self._release(set_release=release)
 
     def publish_factory_totest(self):
         logger.info('Publish test project content')
-        if not self.dryrun:
+        if not (self.dryrun or self.norelease):
             self.api.switch_flag_in_prj(
                 self.test_project, flag='publish', state='enable')
 
@@ -619,7 +616,7 @@
         self.update_totest(new_snapshot)
 
     def write_version_to_dashboard(self, target, version):
-        if not self.dryrun:
+        if not (self.dryrun or self.norelease):
             self.api.dashboard_content_ensure('version_%s' % target, version, 
comment='Update version')
 
 
@@ -645,7 +642,7 @@
         baseurl = ['source', project, package]
 
         url = self.api.makeurl(baseurl, query=query)
-        if self.dryrun:
+        if self.dryrun or self.norelease:
             logger.info("release %s/%s (%s)" % (project, package, set_release))
         else:
             self.api.retried_POST(url)
@@ -823,6 +820,7 @@
     ]
 
     ftp_products = ['000product:openSUSE-ftp-ftp-aarch64',
+                    '000product:openSUSE-ftp-ftp-armv7hl',
                     ]
 
     livecd_products = []
@@ -933,6 +931,7 @@
         parser = cmdln.CmdlnOptionParser(self)
         parser.add_option("--dry", action="store_true", help="dry run")
         parser.add_option("--debug", action="store_true", help="debug output")
+        parser.add_option("--norelease", action="store_true", help="do not 
trigger release in build service")
         parser.add_option("--verbose", action="store_true", help="verbose")
         parser.add_option(
             "--osc-debug", action="store_true", help="osc debug output")
@@ -981,7 +980,7 @@
                 project, ', '.join(self.totest_class))
             raise cmdln.CmdlnUserError(msg)
 
-        return self.totest_class[project](project, self.options.dry, 
self.options.obs_api_url, self.options.openqa_server)
+        return self.totest_class[project](project, self.options.dry, 
self.options.norelease, self.options.obs_api_url, self.options.openqa_server)
 
     @cmdln.option('-n', '--interval', metavar="minutes", type="int", 
help="periodic interval in minutes")
     def do_run(self, subcmd, opts, project='openSUSE:Factory'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180604.ce0a143/update_crawler.py 
new/openSUSE-release-tools-20180614.3b99137/update_crawler.py
--- old/openSUSE-release-tools-20180604.ce0a143/update_crawler.py       
2018-06-04 22:09:07.000000000 +0200
+++ new/openSUSE-release-tools-20180614.3b99137/update_crawler.py       
2018-06-14 07:05:13.000000000 +0200
@@ -177,7 +177,7 @@
                     srcrev = xml.get('verifymd5')
                 logging.debug('rev {}'.format(srcrev))
                 if srcrev == rev:
-                    logging.debug('{}: found existing request 
{}'.format(dst_package, r.reqid))
+                    logging.debug('{}: found existing request {} 
{}/{}'.format(dst_package, r.reqid, a.src_project, src_project))
                     foundrev = True
         return foundrev
 

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.ueawa2/_old  2018-06-19 12:00:58.752011875 +0200
+++ /var/tmp/diff_new_pack.ueawa2/_new  2018-06-19 12:00:58.752011875 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20180604.ce0a143
-mtime: 1528142947
-commit: ce0a1431ef6d6a2399ab4b7596281440b242faa8
+version: 20180614.3b99137
+mtime: 1528952713
+commit: 3b991374ae061d40196efdc63c88720908cc077c
 


Reply via email to