Hello community,
here is the log from the commit of package openSUSE-release-tools for
openSUSE:Factory checked in at 2018-07-21 10:25:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Sat Jul 21 10:25:19 2018 rev:114 rq:624221 version:20180720.7920baa
Changes:
--------
---
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
2018-07-19 23:01:53.232667934 +0200
+++
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
2018-07-21 10:25:20.910955619 +0200
@@ -2 +2,24 @@
-Thu Jul 19 06:15:37 UTC 2018 - [email protected]
+Fri Jul 20 08:10:35 UTC 2018 - [email protected]
+
+- Update to version 20180720.7920baa:
+ * pkglistgen: Commit a summary.yml into 000product-summary if existant
+ * pkglist: Review the proper package (000release-packages)
+ * pkglistgen: allow to pass staging:a as scope
+ * pkglistgen: remove default-support-status option
+
+-------------------------------------------------------------------
+Thu Jul 19 20:06:19 UTC 2018 - [email protected]
+
+- Update to version 20180719.9951b45:
+ * Move expanded_repos into staging api
+ * repo_checker: Expand repositories of target project
+ * repo_checker: Fix the review loop
+
+-------------------------------------------------------------------
+Thu Jul 19 14:18:48 UTC 2018 - [email protected]
+
+- Update to version 20180719.c9030ef:
+ * Revert "dist/ci/Dockerfile: add python2-pyOpenSSL as dependency."
+
+-------------------------------------------------------------------
+Thu Jul 19 06:15:37 UTC 2018 - [email protected]
Old:
----
openSUSE-release-tools-20180718.2f192f1.obscpio
New:
----
openSUSE-release-tools-20180720.7920baa.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.Ndad1c/_old 2018-07-21 10:25:21.378955506 +0200
+++ /var/tmp/diff_new_pack.Ndad1c/_new 2018-07-21 10:25:21.378955506 +0200
@@ -20,7 +20,7 @@
%define source_dir openSUSE-release-tools
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20180718.2f192f1
+Version: 20180720.7920baa
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.Ndad1c/_old 2018-07-21 10:25:21.406955499 +0200
+++ /var/tmp/diff_new_pack.Ndad1c/_new 2018-07-21 10:25:21.410955499 +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">56b6fe1fa578c18f5cc753687037fee9f81d0998</param>
+ <param
name="changesrevision">fb114a75d437351b61a849b746d82b7cbbbb871a</param>
</service>
-</servicedata>
\ No newline at end of file
+</servicedata>
++++++ openSUSE-release-tools-20180718.2f192f1.obscpio ->
openSUSE-release-tools-20180720.7920baa.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20180718.2f192f1/dist/ci/Dockerfile
new/openSUSE-release-tools-20180720.7920baa/dist/ci/Dockerfile
--- old/openSUSE-release-tools-20180718.2f192f1/dist/ci/Dockerfile
2018-07-18 11:39:21.000000000 +0200
+++ new/openSUSE-release-tools-20180720.7920baa/dist/ci/Dockerfile
2018-07-20 09:59:59.000000000 +0200
@@ -12,7 +12,6 @@
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-20180718.2f192f1/osclib/stagingapi.py
new/openSUSE-release-tools-20180720.7920baa/osclib/stagingapi.py
--- old/openSUSE-release-tools-20180718.2f192f1/osclib/stagingapi.py
2018-07-18 11:39:21.000000000 +0200
+++ new/openSUSE-release-tools-20180720.7920baa/osclib/stagingapi.py
2018-07-20 09:59:59.000000000 +0200
@@ -1826,3 +1826,16 @@
return meta.find(xpath) is not None
return False
+
+ # recursively detect underlying projects
+ def expand_project_repo(self, project, repo, repos):
+ repos.append([project, repo])
+ url = self.makeurl(['source', project, '_meta'])
+ meta = ET.parse(self.retried_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 expanded_repos(self, repo):
+ return self.expand_project_repo(self.project, repo, [])
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20180718.2f192f1/pkglistgen.py
new/openSUSE-release-tools-20180720.7920baa/pkglistgen.py
--- old/openSUSE-release-tools-20180718.2f192f1/pkglistgen.py 2018-07-18
11:39:21.000000000 +0200
+++ new/openSUSE-release-tools-20180720.7920baa/pkglistgen.py 2018-07-20
09:59:59.000000000 +0200
@@ -33,7 +33,7 @@
import urllib2
import filecmp
from osc.core import checkout_package
-from osc.core import http_GET
+from osc.core import http_GET, http_PUT
from osc.core import makeurl
from osc.core import Package
from osc.core import show_results_meta
@@ -89,6 +89,7 @@
self.solved = False
self.not_found = dict()
self.unresolvable = dict()
+ self.default_support_status = None
for a in ARCHITECTURES:
self.packages[a] = []
self.unresolvable[a] = dict()
@@ -388,7 +389,7 @@
else:
logger.error(msg)
name = msg
- status = self.pkglist.supportstatus(name)
+ status = self.pkglist.supportstatus(name) or
self.default_support_status
attrs = {'name': name}
if status is not None:
attrs['supportstatus'] = status
@@ -399,6 +400,13 @@
return root
+ # just list all packages in it as an array - to be output as one yml
+ def summary(self):
+ ret = set()
+ for arch in ['*'] + self.architectures:
+ ret |= set(self.solved_packages[arch].keys())
+ return ret
+
def dump(self):
pprint({'name': self.name, 'missing': self.missing, 'packages':
self.packages,
'solved': self.solved_packages, 'silents': self.silents})
@@ -415,7 +423,6 @@
ToolBase.ToolBase.__init__(self)
# package -> supportatus
self.packages = dict()
- self.default_support_status = 'l3'
self.groups = dict()
self._supportstatus = None
self.input_dir = '.'
@@ -428,14 +435,6 @@
self.output = None
self.locales = set()
- def _dump_supportstatus(self):
- for name in self.packages.keys():
- for status in self.packages[name]:
- if status == self.default_support_status:
- continue
- for group in self.packages[name][status]:
- print(name, status)
-
def _load_supportstatus(self):
# XXX
fn = os.path.join(self.input_dir, 'supportstatus.txt')
@@ -448,15 +447,11 @@
if len(a) > 1:
self._supportstatus[a[0]] = a[1]
- # TODO: make per product
def supportstatus(self, package):
if self._supportstatus is None:
self._load_supportstatus()
- if package in self._supportstatus:
- return self._supportstatus[package]
- else:
- return self.default_support_status
+ return self._supportstatus.get(package)
def _load_group_file(self, fn):
output = None
@@ -486,11 +481,13 @@
def _write_all_groups(self):
self._check_supplements()
+ summary = dict()
archs = ['*'] + self.architectures
for name in self.groups:
group = self.groups[name]
if not group.solved:
continue
+ summary[name] = group.summary()
fn = '{}.group'.format(group.name)
with open(os.path.join(self.output_dir, fn), 'w') as fh:
comment = group.comment
@@ -502,6 +499,7 @@
x = re.sub('\s*<!-- reason:', ' <!-- reason:', x)
# fh.write(ET.tostring(x, pretty_print = True, doctype =
'<?xml version="1.0" encoding="UTF-8"?>'))
fh.write(x)
+ return summary
def _parse_product(self, root):
print(root.find('.//products/product/name').text)
@@ -526,16 +524,8 @@
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, [])
+ return StagingAPI(self.apiurl, project).expanded_repos('standard')
def _check_supplements(self):
tocheck = set()
@@ -696,7 +686,7 @@
class CommandLineInterface(ToolBase.CommandLineInterface):
- SCOPES = ['all', 'arm', 'target', 'rings', 'staging', 'ports']
+ SCOPES = ['all', 'arm', 'target', 'rings', 'ports', 'staging']
def __init__(self, *args, **kwargs):
ToolBase.CommandLineInterface.__init__(self, args, kwargs)
@@ -710,15 +700,12 @@
help='input directory', default='.')
parser.add_option('-a', '--architecture', dest='architectures',
metavar='ARCH',
help='architecure', action='append')
- parser.add_option('--default-support-status',
dest='default_support_status', metavar='STATUS',
- help='default support status', default=None)
return parser
def setup_tool(self):
tool = PkgListGen()
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
@@ -738,17 +725,6 @@
for name in sorted(self.tool.groups.keys()):
print(name)
- # to be called only once to bootstrap
- def do_dump_supportstatus(self, subcmd, opts):
- """${cmd_name}: dump supportstatus of input files
-
- ${cmd_usage}
- ${cmd_option_list}
- """
-
- self.tool.load_all_groups()
- self.tool._dump_supportstatus()
-
def do_list_products(self, subcmd, opts):
"""${cmd_name}: list all products
@@ -1119,6 +1095,7 @@
self.tool.solve_module(groupname, includes, excludes)
g = self.tool.groups[groupname]
g.conflicts = settings.get('conflicts', [])
+ g.default_support_status = settings.get('default-support',
'unsupported')
modules.append(g)
# not defined for openSUSE
@@ -1142,11 +1119,11 @@
module.solved_packages[arch].pop(p, None)
self.tool._collect_unsorted_packages(modules,
self.tool.groups.get('unsorted'))
- self.tool._write_all_groups()
+ return self.tool._write_all_groups()
@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('-s', '--scope', default='all', help='scope on which to
operate ({}, staging:$letter)'.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):
@@ -1160,6 +1137,12 @@
if not opts.project:
raise ValueError('project is required')
+ opts.staging_project = None
+ if opts.scope.startswith('staging:'):
+ opts.staging_project = re.match('staging:(.*)',
opts.scope).group(1)
+ opts.staging_project = opts.staging_project.upper()
+ opts.scope = 'staging'
+
if opts.scope not in self.SCOPES:
raise ValueError('scope must be one of: {}'.format(',
'.join(self.SCOPES)))
@@ -1191,7 +1174,7 @@
if opts.scope == 'target':
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)
+ self.update_and_solve_target_wrapper(api, target_project,
target_config, main_repo, opts, drop_list=True)
return self.error_occured
elif opts.scope == 'arm':
main_repo = 'ports'
@@ -1204,19 +1187,21 @@
main_repo = 'ports'
opts.project += ':Ports'
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)
+ self.update_and_solve_target_wrapper(api, target_project,
target_config, main_repo, opts, drop_list=True)
return self.error_occured
elif opts.scope == 'rings':
opts.project = api.rings[1]
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)
+ self.update_and_solve_target_wrapper(api, target_project,
target_config, main_repo, opts)
return self.error_occured
elif opts.scope == 'staging':
letters = api.get_staging_projects_short()
for letter in letters:
+ if opts.staging_project and letter != opts.staging_project:
+ continue
opts.project = api.prj_from_short(letter)
self.repos = self.tool.expand_repos(opts.project, main_repo)
- self.update_and_solve_target_wrapper(apiurl, target_project,
target_config, main_repo, opts)
+ self.update_and_solve_target_wrapper(api, target_project,
target_config, main_repo, opts)
return self.error_occured
def update_and_solve_target_wrapper(self, *args, **kwargs):
@@ -1231,7 +1216,7 @@
traceback.print_exc()
self.error_occured = True
- def update_and_solve_target(self, apiurl, target_project, target_config,
main_repo, opts,
+ def update_and_solve_target(self, api, target_project, target_config,
main_repo, opts,
skip_release=False, drop_list=False):
print('[{}] {}/{}: update and solve'.format(opts.scope, opts.project,
main_repo))
@@ -1239,16 +1224,16 @@
product = target_config.get('pkglistgen-product', '000product')
release = target_config.get('pkglistgen-release',
'000release-packages')
- url = makeurl(apiurl, ['source', opts.project])
+ url = api.makeurl(['source', opts.project])
packages = ET.parse(http_GET(url)).getroot()
if packages.find('entry[@name="{}"]'.format(product)) is None:
if not self.options.dry:
- undelete_package(apiurl, opts.project, product, 'revive')
+ undelete_package(api.apiurl, opts.project, product, 'revive')
# TODO disable build.
print('{} undeleted, skip dvd until next cycle'.format(product))
return
elif not opts.force:
- root = ET.fromstringlist(show_results_meta(apiurl, opts.project,
product,
+ root = ET.fromstringlist(show_results_meta(api.apiurl,
opts.project, product,
repository=[main_repo],
multibuild=True))
if len(root.xpath('result[@state="building"]')) or
len(root.xpath('result[@state="dirty"]')):
print('{}/{} build in progress'.format(opts.project, product))
@@ -1260,12 +1245,12 @@
if packages.find('entry[@name="{}"]'.format(release)) is None:
if not self.options.dry:
- undelete_package(apiurl, opts.project, product, 'revive')
+ undelete_package(api.apiurl, opts.project, release,
'revive')
print('{} undeleted, skip dvd until next
cycle'.format(release))
return
# Cache dir specific to hostname and project.
- host = urlparse.urlparse(apiurl).hostname
+ host = urlparse.urlparse(api.apiurl).hostname
cache_dir = save_cache_path('opensuse-packagelists', host,
opts.project)
if not opts.no_checkout:
@@ -1281,7 +1266,7 @@
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)
+ checkout_package(api.apiurl, opts.project, package,
expand_link=True, prj_dir=cache_dir)
if not skip_release:
self.unlink_all_except(release_dir)
@@ -1321,7 +1306,8 @@
opts.include_suggested =
str2bool(target_config.get('pkglistgen-include-suggested'))
opts.locale = target_config.get('pkglistgen-local')
opts.locales_from = target_config.get('pkglistgen-locales-from')
- self.do_solve('solve', opts)
+ summary = self.do_solve('solve', opts)
+
if opts.stop_after_solve:
return
@@ -1332,7 +1318,7 @@
family_last = target_config.get('pkglistgen-product-family-last')
family_include =
target_config.get('pkglistgen-product-family-include')
solv_prior = self.solv_cache_update(
- apiurl, cache_dir_solv, target_project, family_last,
family_include, opts)
+ api.apiurl, cache_dir_solv, target_project, family_last,
family_include, opts)
# Include pre-final release solv files for target project. These
# files will only exist from previous runs.
@@ -1376,6 +1362,16 @@
self.build_stub(release_dir, 'spec')
self.commit_package(release_dir)
+ if api.item_exists(opts.project, '000product-summary'):
+ summary_str = "# Summary of packages in groups"
+ for group in sorted(summary.keys()):
+ summary_str += "\n" + group + ":\n"
+ for package in sorted(summary[group]):
+ summary_str += " - " + package + "\n"
+
+ url = api.makeurl(['source', opts.project, '000product-summary',
'summary.yml'])
+ http_PUT(url, data=summary_str)
+
def solv_cache_update(self, apiurl, cache_dir_solv, target_project,
family_last, family_include, opts):
"""Dump solv files (do_dump_solv) for all products in family."""
prior = set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20180718.2f192f1/repo_checker.py
new/openSUSE-release-tools-20180720.7920baa/repo_checker.py
--- old/openSUSE-release-tools-20180718.2f192f1/repo_checker.py 2018-07-18
11:39:21.000000000 +0200
+++ new/openSUSE-release-tools-20180720.7920baa/repo_checker.py 2018-07-20
09:59:59.000000000 +0200
@@ -164,12 +164,9 @@
# Not in a "ready" state.
openQA_only = False # Not relevant so set to False.
if status and str(status['overall_state']) == 'failed':
- # Exception to the rule is openQA only in failed state.
- openQA_only = True
- if len(status['broken_packages']):
- # Broken packages so not just openQA.
- openQA_only = False
- break
+ # Exception to the rule is openQA only in failed state,
+ # Broken packages so not just openQA.
+ openQA_only = (len(status['broken_packages']) == 0)
if not self.force and not openQA_only:
self.logger.debug('{}: {} not ready'.format(request.reqid,
group))
@@ -257,7 +254,11 @@
continue
# Only bother if staging can match arch, but layered first.
- directories.insert(0, self.mirror(project, arch))
+ repos = self.staging_api(project).expanded_repos('standard')
+ for layered_project, repo in reversed(repos):
+ if repo != 'standard':
+ raise "We assume all is standard"
+ directories.insert(0, self.mirror(layered_project, arch))
whitelist = self.binary_whitelist(project, arch, group)
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.Ndad1c/_old 2018-07-21 10:25:22.058955341 +0200
+++ /var/tmp/diff_new_pack.Ndad1c/_new 2018-07-21 10:25:22.058955341 +0200
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20180718.2f192f1
-mtime: 1531906761
-commit: 2f192f1240ef413f200b620210e0ce80eb9d3af0
+version: 20180720.7920baa
+mtime: 1532073599
+commit: 7920baacc7bdfbfeb9f3c6b40910166e5a1980fd