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 - [email protected]
+
+- 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': '[email protected]',
'mail-release-list': '[email protected]',
},
+ 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