Hello community,

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

Package is "openSUSE-release-tools"

Fri Jul  6 10:42:11 2018 rev:112 rq:620661 version:20180703.72eb7dc

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2018-07-03 23:36:07.216256900 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2018-07-06 10:42:18.191232782 +0200
@@ -1,0 +2,12 @@
+Tue Jul 03 15:20:29 UTC 2018 - opensuse-releaset...@opensuse.org
+
+- Update to version 20180703.72eb7dc:
+  * pkglistgen: Don't crash on empty groups (unsorted is one)
+  * pkglistgen: Add --stop-after-solve option to ease debugging
+  * pkglistgen: Add --no-checkout option to accelerate reruns
+  * pkglistgen: Calculate the repos list instead of hardcoding
+  * stagingapi: add support for Backports
+  * pkglistgen: drop ring 2
+  * stagingapi: apply default config first
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20180703.29c4b6a.obscpio

New:
----
  openSUSE-release-tools-20180703.72eb7dc.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.s9PNVY/_old  2018-07-06 10:42:19.123231672 +0200
+++ /var/tmp/diff_new_pack.s9PNVY/_new  2018-07-06 10:42:19.123231672 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20180703.29c4b6a
+Version:        20180703.72eb7dc
 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.s9PNVY/_old  2018-07-06 10:42:19.163231625 +0200
+++ /var/tmp/diff_new_pack.s9PNVY/_new  2018-07-06 10:42:19.163231625 +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">29c4b6a2108ff226f479c5f05f366ed2e8e85bef</param>
+    <param 
name="changesrevision">72eb7dc4fc890d1b88c83df1823bc7a860910c4e</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20180703.29c4b6a.obscpio -> 
openSUSE-release-tools-20180703.72eb7dc.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180703.29c4b6a/osclib/conf.py 
new/openSUSE-release-tools-20180703.72eb7dc/osclib/conf.py
--- old/openSUSE-release-tools-20180703.29c4b6a/osclib/conf.py  2018-07-03 
15:23:42.000000000 +0200
+++ new/openSUSE-release-tools-20180703.72eb7dc/osclib/conf.py  2018-07-03 
17:11:01.000000000 +0200
@@ -107,6 +107,27 @@
         'mail-noreply': 'nore...@opensuse.org',
         'mail-release-list': 'opensuse-releaset...@opensuse.org',
     },
+    r'openSUSE:(?P<project>Backports:(?P<version>[^:]+))': {
+        'staging': 'openSUSE:%(project)s:Staging',
+        'staging-group': 'factory-staging',
+        'staging-archs': 'x86_64',
+        'lock': 'openSUSE:%(project)s:Staging',
+        'lock-ns': 'openSUSE',
+        'onlyadi': True,
+        'leaper-override-group': 'leap-reviewers',
+        'review-team': 'opensuse-review-team',
+        'legal-review-group': 'legal-auto',
+        # review-team optionally added by leaper.py.
+        'repo-checker': 'repo-checker',
+        'repo_checker-arch-whitelist': 'x86_64',
+        # 16 hour staging window for follow-ups since lower throughput.
+        'splitter-staging-age-max': '57600',
+        # No special packages since they will pass through Leap first.
+        'splitter-special-packages': '',
+        # Allow `unselect --cleanup` to operate immediately on:
+        # - Update crawler requests (leaper)
+        'unselect-cleanup-whitelist': 'leaper',
+    },
     # Allows devel projects to utilize tools that require config, but not
     # complete StagingAPI support.
     r'(?P<project>.*$)': {
@@ -114,6 +135,7 @@
         'staging-group': None,
         'staging-archs': '',
         'staging-dvd-archs': '',
+        'onlyadi': False,
         'rings': None,
         'nonfree': None,
         'rebuild': None,
@@ -123,7 +145,7 @@
         'lock-ns': None,
         'delreq-review': None,
         'main-repo': 'openSUSE_Factory',
-        'priority': '1000', # Lowest priority as only a fallback.
+        '_priority': '0', # Apply defaults first
     },
 }
 
@@ -164,12 +186,14 @@
     def populate_conf(self):
         """Add sane default into the configuration."""
         defaults = {}
-        default_ordered = OrderedDict(sorted(DEFAULT.items(), key=lambda i: 
int(i[1].get('priority', 99))))
+        default_ordered = OrderedDict(sorted(DEFAULT.items(), key=lambda i: 
int(i[1].get('_priority', 99))))
         for prj_pattern in default_ordered:
             match = re.match(prj_pattern, self.project)
             if match:
                 project = match.group('project')
                 for k, v in DEFAULT[prj_pattern].items():
+                    if k.startswith('_'):
+                        continue
                     if isinstance(v, basestring) and '%(project)s' in v:
                         defaults[k] = v % {'project': project}
                     elif isinstance(v, basestring) and '%(project.lower)s' in 
v:
@@ -178,7 +202,8 @@
                         defaults[k] = v % {'version': match.group('version')}
                     else:
                         defaults[k] = v
-                break
+                if int(DEFAULT[prj_pattern].get('_priority', 99)) != 0:
+                    break
 
         if self.remote_values:
             defaults.update(self.remote_values)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180703.29c4b6a/osclib/request_splitter.py 
new/openSUSE-release-tools-20180703.72eb7dc/osclib/request_splitter.py
--- old/openSUSE-release-tools-20180703.29c4b6a/osclib/request_splitter.py      
2018-07-03 15:23:42.000000000 +0200
+++ new/openSUSE-release-tools-20180703.72eb7dc/osclib/request_splitter.py      
2018-07-03 17:11:01.000000000 +0200
@@ -127,7 +127,7 @@
         ring = self.ring_get(target_package)
         if ring:
             target.set('ring', ring)
-        elif request_type == 'delete':
+        elif not self.api.conlyadi and request_type == 'delete':
             # Delete requests should always be considered in a ring.
             target.set('ring', 'delete')
 
@@ -140,6 +140,8 @@
         request.set('postponed', 'False')
 
     def ring_get(self, target_package):
+        if self.api.conlyadi:
+            return None
         if self.api.crings:
             ring = self.api.ring_packages_for_links.get(target_package)
             if ring:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180703.29c4b6a/pkglistgen.py 
new/openSUSE-release-tools-20180703.72eb7dc/pkglistgen.py
--- old/openSUSE-release-tools-20180703.29c4b6a/pkglistgen.py   2018-07-03 
15:23:42.000000000 +0200
+++ new/openSUSE-release-tools-20180703.72eb7dc/pkglistgen.py   2018-07-03 
17:11:01.000000000 +0200
@@ -72,7 +72,6 @@
 
 SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
 ARCHITECTURES = ['x86_64', 'ppc64le', 's390x', 'aarch64']
-DEFAULT_REPOS = ("openSUSE:Factory/standard")
 PRODUCT_SERVICE = '/usr/lib/obs/service/create_single_product'
 
 
@@ -414,7 +413,6 @@
 
     def __init__(self):
         ToolBase.ToolBase.__init__(self)
-        self.repos = DEFAULT_REPOS
         # package -> supportatus
         self.packages = dict()
         self.default_support_status = 'l3'
@@ -528,6 +526,17 @@
         for e in excludes:
             g.ignore(self.groups[e])
 
+    def expand_project_repo(self, project, repo, repos):
+        repos.append([project, repo])
+        url = makeurl(self.apiurl, ['source', project, '_meta'])
+        meta = ET.parse(http_GET(url)).getroot()
+        for path in 
meta.findall('.//repository[@name="{}"]/path'.format(repo)):
+            self.expand_project_repo(path.get('project', project), 
path.get('repository'), repos)
+        return repos
+
+    def expand_repos(self, project, repo):
+        return self.expand_project_repo(project, repo, [])
+
     def _check_supplements(self):
         tocheck = set()
         tocheck_locales = set()
@@ -568,8 +577,7 @@
         self.lockjobs[arch] = []
         solvables = set()
 
-        for prp in self.repos:
-            project, reponame = prp.split('/')
+        for project, reponame in self.repos:
             repo = pool.add_repo(project)
             s = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(project, 
reponame, arch))
             r = repo.add_solv(s)
@@ -692,11 +700,10 @@
 
     def __init__(self, *args, **kwargs):
         ToolBase.CommandLineInterface.__init__(self, args, kwargs)
+        self.repos = []
 
     def get_optparser(self):
         parser = ToolBase.CommandLineInterface.get_optparser(self)
-        parser.add_option('-r', '--repositories', dest='repos', 
metavar='REPOS', action='append',
-                          help='repositories to process (%s)' % DEFAULT_REPOS)
         parser.add_option('-i', '--input-dir', dest='input_dir', metavar='DIR',
                           help='input directory', default='.')
         parser.add_option('-o', '--output-dir', dest='output_dir', 
metavar='DIR',
@@ -712,19 +719,11 @@
         tool.input_dir = self.options.input_dir
         tool.output_dir = self.options.output_dir
         tool.default_support_status = self.options.default_support_status
+        tool.repos = self.repos
         if self.options.architectures:
             tool.architectures = self.options.architectures
         else:
             tool.architectures = ARCHITECTURES
-        if self.options.repos:
-            repos = []
-            for r in self.options.repos:
-                # handle comas as well, easier for shell script for now
-                if ',' in r:
-                    repos += r.split(',')
-                else:
-                    repos.append(r)
-            tool.repos = repos
         return tool
 
     def do_list(self, subcmd, opts):
@@ -769,8 +768,7 @@
         # only there to parse the repos
         bs_mirrorfull = os.path.join(SCRIPT_PATH, 'bs_mirrorfull')
         global_update = False
-        for prp in self.tool.repos:
-            project, repo = prp.split('/')
+        for project, repo in self.repos:
             for arch in self.tool.architectures:
                 # TODO: refactor to common function with repo_checker.py
                 d = os.path.join(CACHEDIR, project, repo, arch)
@@ -804,8 +802,7 @@
 
     def update_merge(self, nonfree):
         """Merge free and nonfree solv files or copy free to merged"""
-        for prp in self.tool.repos:
-            project, repo = prp.split('/')
+        for project, repo in self.repos:
             for arch in self.tool.architectures:
                 solv_file = os.path.join(
                     CACHEDIR, 'repo-{}-{}-{}.solv'.format(project, repo, arch))
@@ -840,8 +837,7 @@
     def do_create_sle_weakremovers(self, subcmd, opts, *prjs):
         for prj in prjs:
             logger.debug("processing %s", prj)
-            self.options.repos = ['/'.join([prj, 'standard'])]
-            self.postoptparse()
+            self.expand_repos(prj, 'standard')
             opts.project = prj
             self.do_update('update', opts)
 
@@ -853,7 +849,7 @@
             sysrepo = None
             for prp in prjs:
                 fn = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(prp, 
'standard', arch))
-                r = pool.add_repo(prp)
+                r = pool.add_repo('/'.join([prj, 'standard']))
                 r.add_solv(fn)
                 if not sysrepo:
                     sysrepo = r
@@ -922,10 +918,9 @@
                 pool = solv.Pool()
                 pool.setarch(arch)
 
-                for prp in self.tool.repos:
-                    project, repo = prp.split('/')
+                for project, repo in self.tool.repos:
                     fn = os.path.join(CACHEDIR, 
'repo-{}-{}-{}.solv'.format(project, repo, arch))
-                    r = pool.add_repo(prp)
+                    r = pool.add_repo()
                     r.add_solv(fn)
 
                 sysrepo = 
pool.add_repo(os.path.basename(old).replace('.merged.solv', ''))
@@ -1117,6 +1112,8 @@
         for group in self.tool.output:
             groupname = group.keys()[0]
             settings = group[groupname]
+            if not settings:  # e.g. unsorted
+                settings = {}
             includes = settings.get('includes', [])
             excludes = settings.get('excludes', [])
             self.tool.solve_module(groupname, includes, excludes)
@@ -1150,6 +1147,8 @@
     @cmdln.option('-f', '--force', action='store_true', help='continue even if 
build is in progress')
     @cmdln.option('-p', '--project', help='target project')
     @cmdln.option('-s', '--scope', default='all', help='scope on which to 
operate ({})'.format(', '.join(SCOPES)))
+    @cmdln.option('--no-checkout', action='store_true', help='reuse checkout 
in cache')
+    @cmdln.option('--stop-after-solve', action='store_true', help='only create 
group files')
     def do_update_and_solve(self, subcmd, opts):
         """${cmd_name}: update and solve for given scope
 
@@ -1185,47 +1184,26 @@
         main_repo = target_config['main-repo']
 
         if opts.scope == 'target':
-            self.options.repos = ['/'.join([target_project, main_repo])]
+            self.repos = self.tool.expand_repos(target_project, main_repo)
             self.update_and_solve_target_wrapper(apiurl, target_project, 
target_config, main_repo, opts, drop_list=True)
             return self.error_occured
         elif opts.scope == 'ports':
             # TODO Continue supporting #1297, but should be abstracted.
             main_repo = 'ports'
             opts.project += ':Ports'
-            self.options.repos = ['/'.join([opts.project, main_repo])]
+            self.repos = self.tool.expand_repos(opts.project, main_repo)
             self.update_and_solve_target_wrapper(apiurl, target_project, 
target_config, main_repo, opts, drop_list=True)
             return self.error_occured
         elif opts.scope == 'rings':
             opts.project = api.rings[1]
-            self.options.repos = [
-                '/'.join([api.rings[1], main_repo]),
-                '/'.join([api.rings[0], main_repo]),
-            ]
+            self.repos = self.tool.expand_repos(api.rings[1], main_repo)
             self.update_and_solve_target_wrapper(apiurl, target_project, 
target_config, main_repo, opts)
-
-            opts.project = api.rings[2]
-            self.options.repos.insert(0, '/'.join([api.rings[2], main_repo]))
-            self.update_and_solve_target_wrapper(apiurl, target_project, 
target_config,
-                                                 main_repo, opts, 
skip_release=True)
             return self.error_occured
         elif opts.scope == 'staging':
             letters = api.get_staging_projects_short()
             for letter in letters:
                 opts.project = api.prj_from_short(letter)
-                self.options.repos = ['/'.join([opts.project, main_repo])]
-
-                if not api.is_staging_bootstrapped(opts.project):
-                    self.options.repos.append('/'.join([opts.project, 
'bootstrap_copy']))
-
-                # DVD project first since it depends on main.
-                if api.item_exists(opts.project + ':DVD'):
-                    opts_dvd = copy.deepcopy(opts)
-                    opts_dvd.project += ':DVD'
-                    self.options.repos.insert(0, '/'.join([opts_dvd.project, 
main_repo]))
-                    self.update_and_solve_target_wrapper(
-                        apiurl, target_project, target_config, main_repo, 
opts_dvd, skip_release=True)
-                    self.options.repos.pop(0)
-
+                self.repos = self.tool.expand_repos(opts.project, main_repo)
                 self.update_and_solve_target_wrapper(apiurl, target_project, 
target_config, main_repo, opts)
             return self.error_occured
 
@@ -1278,15 +1256,19 @@
         host = urlparse.urlparse(apiurl).hostname
         cache_dir = save_cache_path('opensuse-packagelists', host, 
opts.project)
 
-        if os.path.exists(cache_dir):
-            shutil.rmtree(cache_dir)
-        os.makedirs(cache_dir)
+        if not opts.no_checkout:
+            if os.path.exists(cache_dir):
+                shutil.rmtree(cache_dir)
+            os.makedirs(cache_dir)
 
         group_dir = os.path.join(cache_dir, group)
         product_dir = os.path.join(cache_dir, product)
         release_dir = os.path.join(cache_dir, release)
 
         for package in checkout_list:
+            if opts.no_checkout:
+                print("Skipping checkout of {}/{}".format(opts.project, 
package))
+                continue
             checkout_package(apiurl, opts.project, package, expand_link=True, 
prj_dir=cache_dir)
 
         if not skip_release:
@@ -1309,17 +1291,14 @@
             print('-> do_update nonfree')
 
             # Switch to nonfree repo (ugly, but that's how the code was setup).
-            self.options.repos_ = self.options.repos
-            self.options.repos = ['/'.join([nonfree, main_repo])]
-            self.postoptparse()
-
+            repos_ = self.repos
             opts_nonfree = copy.deepcopy(opts)
             opts_nonfree.project = nonfree
+            self.repos = self.expand_repos(nonfree, main_repo)
             self.do_update('update', opts_nonfree)
 
             # Switch repo back to main target project.
-            self.options.repos = self.options.repos_
-            self.postoptparse()
+            self.repos = repos_
 
         print('-> update_merge')
         self.update_merge(nonfree if drop_list else False)
@@ -1331,6 +1310,8 @@
         opts.locale = target_config.get('pkglistgen-local')
         opts.locales_from = target_config.get('pkglistgen-locales-from')
         self.do_solve('solve', opts)
+        if opts.stop_after_solve:
+            return
 
         if drop_list:
             # Ensure solv files from all releases in product family are 
updated.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180703.29c4b6a/tests/config_tests.py 
new/openSUSE-release-tools-20180703.72eb7dc/tests/config_tests.py
--- old/openSUSE-release-tools-20180703.29c4b6a/tests/config_tests.py   
2018-07-03 15:23:42.000000000 +0200
+++ new/openSUSE-release-tools-20180703.72eb7dc/tests/config_tests.py   
2018-07-03 17:11:01.000000000 +0200
@@ -47,6 +47,7 @@
         projects = (
             'openSUSE:Factory',
             'openSUSE:Leap:15.0',
+            'openSUSE:Backports:SLE-15',
             'SUSE:SLE-15:GA',
             'SUSE:SLE-12:GA',
             'GNOME:Factory',

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.s9PNVY/_old  2018-07-06 10:42:19.627231073 +0200
+++ /var/tmp/diff_new_pack.s9PNVY/_new  2018-07-06 10:42:19.631231068 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20180703.29c4b6a
-mtime: 1530624222
-commit: 29c4b6a2108ff226f479c5f05f366ed2e8e85bef
+version: 20180703.72eb7dc
+mtime: 1530630661
+commit: 72eb7dc4fc890d1b88c83df1823bc7a860910c4e
 


Reply via email to