Hello community,
here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2019-03-10 09:40:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Sun Mar 10 09:40:08 2019 rev:167 rq:682832 version:20190308.7f2195f
Changes:
--------
--- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2019-03-06 15:51:24.936435685 +0100
+++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.28833/openSUSE-release-tools.changes 2019-03-10 09:40:13.488106563 +0100
@@ -1,0 +2,34 @@
+Fri Mar 08 12:49:04 UTC 2019 - opensuse-releaseteam@opensuse.org
+
+- Update to version 20190308.7f2195f:
+ * No longer add repo checker as reviewer for Factory
+ * Remove 15.1:ARM:Live
+
+-------------------------------------------------------------------
+Fri Mar 08 06:47:12 UTC 2019 - opensuse-releaseteam@opensuse.org
+
+- Update to version 20190308.44cbc3a:
+ * Block adi command from accepting if checks aren't succeeding
+ * Add all checks from staging-required-checks-adi to main repo of adi projects
+
+-------------------------------------------------------------------
+Wed Mar 06 22:04:11 UTC 2019 - opensuse-releaseteam@opensuse.org
+
+- Update to version 20190306.819d437:
+ * dist: provide origin-manager report service and timer.
+ * dist/package: provide osc-plugin-origin package.
+ * osc-origin: provide initial origin osc subcommand.
+ * osclib/core: package_list_without_links(): ignore meta packages (00 prefix).
+ * osclib/origin: provide __str__ method that indicates pending.
+ * osclib/origin: config_resolve_create_family(): force origin_expanded to string.
+ * osclib/util: mail_send(): allow a from_key of None to indicate osc user.
+ * osclib/util: mail_send() utilize Config.get() pattern.
+ * osclib/util: mail_send(): use to as config key if no at sign.
+
+-------------------------------------------------------------------
+Wed Mar 06 21:07:39 UTC 2019 - opensuse-releaseteam@opensuse.org
+
+- Update to version 20190306.ef6e30c:
+ * dist/ci/Dockerfile: change from Tumbleweed to Leap for build host.
+
+-------------------------------------------------------------------
Old:
----
openSUSE-release-tools-20190305.9f97c15.obscpio
New:
----
openSUSE-release-tools-20190308.7f2195f.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.urdSj3/_old 2019-03-10 09:40:15.116106173 +0100
+++ /var/tmp/diff_new_pack.urdSj3/_new 2019-03-10 09:40:15.120106172 +0100
@@ -20,7 +20,7 @@
%define source_dir openSUSE-release-tools
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20190305.9f97c15
+Version: 20190308.7f2195f
Release: 0
Summary: Tools to aid in staging and release work for openSUSE/SUSE
License: GPL-2.0-or-later AND MIT
@@ -192,6 +192,7 @@
Summary: Package origin management tools
Group: Development/Tools/Other
BuildArch: noarch
+Requires: osc-plugin-origin = %{version}
Requires: osclib = %{version}
Requires(pre): shadow
@@ -296,6 +297,15 @@
%description -n osc-plugin-cycle
OSC plugin for cycle visualization, see `osc cycle --help`.
+%package -n osc-plugin-origin
+Summary: OSC plugin for origin management
+Group: Development/Tools/Other
+BuildArch: noarch
+Requires: osc >= 0.159.0
+
+%description -n osc-plugin-origin
+OSC plugin for for working with origin information, see `osc origin --help`.
+
%package -n osc-plugin-staging
Summary: OSC plugin for the staging workflow
Group: Development/Tools/Other
@@ -497,6 +507,7 @@
%exclude %{_datadir}/%{source_dir}/osclib
%exclude %{_datadir}/%{source_dir}/osc-check_dups.py
%exclude %{_datadir}/%{source_dir}/osc-cycle.py
+%exclude %{_datadir}/%{source_dir}/osc-origin.py
%exclude %{_datadir}/%{source_dir}/osc-staging.py
%exclude %{_datadir}/%{source_dir}/osc-vdelreq.py
%exclude %{_datadir}/%{source_dir}/update_crawler.py
@@ -597,6 +608,8 @@
%{_datadir}/%{source_dir}/origin-manager.py
%{_unitdir}/osrt-origin-manager.service
%{_unitdir}/osrt-origin-manager.timer
+%{_unitdir}/osrt-origin-manager-report@.service
+%{_unitdir}/osrt-origin-manager-report@.timer
%files repo-checker
%defattr(-,root,root,-)
@@ -668,6 +681,11 @@
%{_datadir}/%{source_dir}/osc-cycle.py
%{osc_plugin_dir}/osc-cycle.py
+%files -n osc-plugin-origin
+%defattr(-,root,root,-)
+%{_datadir}/%{source_dir}/osc-origin.py
+%{osc_plugin_dir}/osc-origin.py
+
%files -n osc-plugin-staging
%defattr(-,root,root,-)
%{_datadir}/%{source_dir}/osc-staging.py
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.urdSj3/_old 2019-03-10 09:40:15.456106092 +0100
+++ /var/tmp/diff_new_pack.urdSj3/_new 2019-03-10 09:40:15.460106091 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
- <param name="changesrevision">9f97c150b8efc516cc5f824771be3b667db6f5ab</param>
+ <param name="changesrevision">7f2195fb575e100404ab88b3af710c00c88b2c2e</param>
</service>
</servicedata>
\ No newline at end of file
++++++ openSUSE-release-tools-20190305.9f97c15.obscpio -> openSUSE-release-tools-20190308.7f2195f.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/devel-project.py new/openSUSE-release-tools-20190308.7f2195f/devel-project.py
--- old/openSUSE-release-tools-20190305.9f97c15/devel-project.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/devel-project.py 2019-03-08 13:48:06.000000000 +0100
@@ -117,7 +117,6 @@
maintainer_map.setdefault(userid, set())
maintainer_map[userid].add(devel_package_identifier)
- Config(apiurl, args.project) # Ensure mail-* options are loaded for mail_send().
subject = 'Packages you maintain are present in {}'.format(args.project)
for userid, package_identifiers in maintainer_map.items():
email = entity_email(apiurl, userid)
@@ -139,7 +138,7 @@
- {}""".format(
args.project, '\n- '.join(sorted(package_identifiers)))
- mail_send(args.project, email, subject, message, dry=args.dry)
+ mail_send(apiurl, args.project, email, subject, message, dry=args.dry)
print('notified {} of {} packages'.format(userid, len(package_identifiers)))
def requests(args):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/dist/ci/Dockerfile new/openSUSE-release-tools-20190308.7f2195f/dist/ci/Dockerfile
--- old/openSUSE-release-tools-20190305.9f97c15/dist/ci/Dockerfile 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/dist/ci/Dockerfile 2019-03-08 13:48:06.000000000 +0100
@@ -1,7 +1,7 @@
# https://docs.docker.com/engine/reference/builder/
# Used for TEST_SUITE=distribution and deployment to OBS.
-FROM opensuse/tumbleweed
+FROM opensuse/leap
MAINTAINER Jimmy Berry
# https://github.com/openSUSE/obs-service-set_version/issues/44 python-packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/dist/package/openSUSE-release-tools.spec new/openSUSE-release-tools-20190308.7f2195f/dist/package/openSUSE-release-tools.spec
--- old/openSUSE-release-tools-20190305.9f97c15/dist/package/openSUSE-release-tools.spec 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/dist/package/openSUSE-release-tools.spec 2019-03-08 13:48:06.000000000 +0100
@@ -193,6 +193,7 @@
Group: Development/Tools/Other
BuildArch: noarch
Requires: osclib = %{version}
+Requires: osc-plugin-origin = %{version}
Requires(pre): shadow
%description origin-manager
@@ -296,6 +297,15 @@
%description -n osc-plugin-cycle
OSC plugin for cycle visualization, see `osc cycle --help`.
+%package -n osc-plugin-origin
+Summary: OSC plugin for origin management
+Group: Development/Tools/Other
+BuildArch: noarch
+Requires: osc >= 0.159.0
+
+%description -n osc-plugin-origin
+OSC plugin for for working with origin information, see `osc origin --help`.
+
%package -n osc-plugin-staging
Summary: OSC plugin for the staging workflow
Group: Development/Tools/Other
@@ -497,6 +507,7 @@
%exclude %{_datadir}/%{source_dir}/osclib
%exclude %{_datadir}/%{source_dir}/osc-check_dups.py
%exclude %{_datadir}/%{source_dir}/osc-cycle.py
+%exclude %{_datadir}/%{source_dir}/osc-origin.py
%exclude %{_datadir}/%{source_dir}/osc-staging.py
%exclude %{_datadir}/%{source_dir}/osc-vdelreq.py
%exclude %{_datadir}/%{source_dir}/update_crawler.py
@@ -597,6 +608,8 @@
%{_datadir}/%{source_dir}/origin-manager.py
%{_unitdir}/osrt-origin-manager.service
%{_unitdir}/osrt-origin-manager.timer
+%{_unitdir}/osrt-origin-manager-report@.service
+%{_unitdir}/osrt-origin-manager-report@.timer
%files repo-checker
%defattr(-,root,root,-)
@@ -668,6 +681,11 @@
%{_datadir}/%{source_dir}/osc-cycle.py
%{osc_plugin_dir}/osc-cycle.py
+%files -n osc-plugin-origin
+%defattr(-,root,root,-)
+%{_datadir}/%{source_dir}/osc-origin.py
+%{osc_plugin_dir}/osc-origin.py
+
%files -n osc-plugin-staging
%defattr(-,root,root,-)
%{_datadir}/%{source_dir}/osc-staging.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osc-origin.py new/openSUSE-release-tools-20190308.7f2195f/osc-origin.py
--- old/openSUSE-release-tools-20190305.9f97c15/osc-origin.py 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osc-origin.py 2019-03-08 13:48:06.000000000 +0100
@@ -0,0 +1,203 @@
+import logging
+import os
+import os.path
+from osc import cmdln
+from osc import core
+from osc import oscerr
+from osclib.cache import Cache
+from osclib.cache_manager import CacheManager
+from osclib.core import package_list_without_links
+from osclib.origin import config_load
+from osclib.origin import origin_find
+from osclib.origin import config_origin_list
+from osclib.util import mail_send
+from shutil import copyfile
+import time
+import yaml
+
+OSRT_ORIGIN_LOOKUP_TTL = 60 * 60 * 24 * 7
+
+@cmdln.option('--debug', action='store_true', help='output debug information')
+@cmdln.option('--diff', action='store_true', help='diff against previous report')
+@cmdln.option('--dry', action='store_true', help='perform a dry-run where applicable')
+@cmdln.option('--force-refresh', action='store_true', help='force refresh of data')
+@cmdln.option('--mail', action='store_true', help='mail report to confg:mail-release-list')
+@cmdln.option('--origins-only', action='store_true', help='list origins instead of expanded config')
+@cmdln.option('-p', '--project', help='project on which to operate (default is openSUSE:Factory)')
+def do_origin(self, subcmd, opts, *args):
+ """${cmd_name}: tools for working with origin information
+
+ ${cmd_option_list}
+
+ config: print expanded OSRT:OriginConfig
+ list: print all packages and their origin
+ package: print the origin of package
+ report: print origin summary report
+
+ Usage:
+ osc origin config [--origins-only]
+ osc origin list [--force-refresh]
+ osc origin package [--debug] PACKAGE
+ osc origin report [--diff] [--force-refresh] [--mail]
+ """
+
+ if len(args) == 0:
+ raise oscerr.WrongArgs('A command must be indicated.')
+ command = args[0]
+ if command not in ['config', 'list', 'package', 'report']:
+ raise oscerr.WrongArgs('Unknown command: {}'.format(command))
+ if command == 'package' and len(args) < 2:
+ raise oscerr.WrongArgs('A package must be indicated.')
+
+ level = logging.DEBUG if opts.debug else None
+ logging.basicConfig(level=level, format='[%(levelname).1s] %(message)s')
+
+ # Allow for determining project from osc store.
+ if not opts.project:
+ if core.is_project_dir('.'):
+ opts.project = core.store_read_project('.')
+ else:
+ opts.project = 'openSUSE:Factory'
+
+ Cache.init()
+ apiurl = self.get_api_url()
+ config = config_load(apiurl, opts.project)
+ if not config:
+ raise oscerr.WrongArgs('OSRT:OriginConfig attribute missing from {}'.format(opts.project))
+
+ function = 'osrt_origin_{}'.format(command)
+ globals()[function](apiurl, opts, *args[1:])
+
+def osrt_origin_config(apiurl, opts, *args):
+ config = config_load(apiurl, opts.project)
+
+ if opts.origins_only:
+ print('\n'.join(config_origin_list(config)))
+ else:
+ yaml.Dumper.ignore_aliases = lambda *args : True
+ print(yaml.dump(config))
+
+def osrt_origin_lookup_file(previous=False):
+ lookup_name = 'lookup.yaml' if not previous else 'lookup.previous.yaml'
+ cache_dir = CacheManager.directory('origin-manager')
+ return os.path.join(cache_dir, lookup_name)
+
+def osrt_origin_lookup(apiurl, project, force_refresh=False, previous=False):
+ lookup_path = osrt_origin_lookup_file(previous)
+ if not force_refresh and os.path.exists(lookup_path):
+ if not previous and time.time() - os.stat(lookup_path).st_mtime > OSRT_ORIGIN_LOOKUP_TTL:
+ return osrt_origin_lookup(apiurl, project, True)
+
+ with open(lookup_path, 'r') as lookup_stream:
+ lookup = yaml.safe_load(lookup_stream)
+ else:
+ if previous:
+ return None
+
+ packages = package_list_without_links(apiurl, project)
+ logging.debug('{} packages found in {}'.format(len(packages), project))
+
+ lookup = {}
+ for package in packages:
+ lookup[str(package)] = str(origin_find(apiurl, project, package))
+
+ if os.path.exists(lookup_path):
+ lookup_path_previous = osrt_origin_lookup_file(True)
+ copyfile(lookup_path, lookup_path_previous)
+
+ with open(lookup_path, 'w+') as lookup_stream:
+ yaml.dump(lookup, lookup_stream, default_flow_style=False)
+
+ return lookup
+
+def osrt_origin_max_key(dictionary, minimum):
+ return max(len(max(dictionary.keys(), key=len)), minimum)
+
+def osrt_origin_list(apiurl, opts, *args):
+ lookup = osrt_origin_lookup(apiurl, opts.project, opts.force_refresh)
+
+ line_format = '{:<' + str(osrt_origin_max_key(lookup, 7)) + '} {}'
+ print(line_format.format('package', 'origin'))
+
+ for package, origin in lookup.items():
+ print(line_format.format(package, origin))
+
+def osrt_origin_package(apiurl, opts, *packages):
+ origin_info = origin_find(apiurl, opts.project, packages[0])
+ print(origin_info)
+
+def osrt_origin_report_count(lookup):
+ origin_count = {}
+ for package, origin in lookup.items():
+ origin_count.setdefault(origin, 0)
+ origin_count[origin] += 1
+
+ return origin_count
+
+def osrt_origin_report_count_diff(origin_count, origin_count_previous):
+ origin_count_change = {}
+ for origin, count in origin_count.items():
+ delta = count - origin_count_previous.get(origin, 0)
+ delta = '+' + str(delta) if delta > 0 else str(delta)
+ origin_count_change[origin] = delta
+
+ return origin_count_change
+
+def osrt_origin_report_diff(lookup, lookup_previous):
+ diff = {}
+ for package, origin in lookup.items():
+ origin_previous = lookup_previous.get(package)
+ if origin != origin_previous:
+ diff[package] = (origin, origin_previous)
+
+ return diff
+
+def osrt_origin_report(apiurl, opts, *args):
+ lookup = osrt_origin_lookup(apiurl, opts.project, opts.force_refresh)
+ origin_count = osrt_origin_report_count(lookup)
+
+ columns = ['origin', 'count', 'percent']
+ column_formats = [
+ '{:<' + str(osrt_origin_max_key(origin_count, 6)) + '}',
+ '{:>5}',
+ '{:>7}',
+ ]
+
+ if opts.diff:
+ columns.insert(2, 'change')
+ column_formats.insert(2, '{:>6}')
+
+ lookup_previous = osrt_origin_lookup(apiurl, opts.project, previous=True)
+ if lookup_previous is not None:
+ origin_count_previous = osrt_origin_report_count(lookup_previous)
+ origin_count_change = osrt_origin_report_count_diff(origin_count, origin_count_previous)
+ package_diff = osrt_origin_report_diff(lookup, lookup_previous)
+ else:
+ origin_count_change = {}
+ package_diff = []
+
+ line_format = ' '.join(column_formats)
+ report = [line_format.format(*columns)]
+
+ total = len(lookup)
+ for origin, count in sorted(origin_count.items(), key=lambda x : x[1], reverse=True):
+ values = [origin, count, round(float(count) / total * 100, 2)]
+ if opts.diff:
+ values.insert(2, origin_count_change.get(origin, 0))
+ report.append(line_format.format(*values))
+
+ if opts.diff and len(package_diff):
+ line_format = '{:<' + str(osrt_origin_max_key(package_diff, 7)) + '} ' + \
+ ' '.join([column_formats[0]] * 2)
+ report.append('')
+ report.append(line_format.format('package', 'origin', 'origin previous'))
+ for package, origins in sorted(package_diff.items()):
+ report.append(line_format.format(package, *origins))
+
+
+ body = '\n'.join(report)
+ print(body)
+
+ if opts.mail:
+ mail_send(apiurl, opts.project, 'release-list', '{} origin report'.format(opts.project),
+ body, None, dry=opts.dry)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/adi_command.py new/openSUSE-release-tools-20190308.7f2195f/osclib/adi_command.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/adi_command.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/adi_command.py 2019-03-08 13:48:06.000000000 +0100
@@ -29,31 +29,39 @@
def check_adi_project(self, project):
query_project = self.api.extract_staging_short(project)
info = self.api.project_status(project, True)
+
if len(info['selected_requests']):
if len(info['building_repositories']):
- print(query_project + " " + Fore.MAGENTA + 'building')
+ print(query_project + ' ' + Fore.MAGENTA + 'building')
return
if len(info['untracked_requests']):
- print(query_project + " " + Fore.YELLOW + 'untracked: ' + ', '.join(['{}[{}]'.format(
+ print(query_project + ' ' + Fore.YELLOW + 'untracked: ' + ', '.join(['{}[{}]'.format(
Fore.CYAN + req['package'] + Fore.RESET, req['number']) for req in info['untracked_requests']]))
return
if len(info['obsolete_requests']):
- print(query_project + " " + Fore.YELLOW + 'obsolete: ' + ', '.join(['{}[{}]'.format(
+ print(query_project + ' ' + Fore.YELLOW + 'obsolete: ' + ', '.join(['{}[{}]'.format(
Fore.CYAN + req['package'] + Fore.RESET, req['number']) for req in info['obsolete_requests']]))
return
if len(info['broken_packages']):
- print(query_project + " " + Fore.RED + 'broken: ' + ', '.join([
+ print(query_project + ' ' + Fore.RED + 'broken: ' + ', '.join([
Fore.CYAN + p['package'] + Fore.RESET for p in info['broken_packages']]))
return
for review in info['missing_reviews']:
- print(query_project + " " + Fore.WHITE + 'review: ' + '{} for {}[{}]'.format(
+ print(query_project + ' ' + Fore.WHITE + 'review: ' + '{} for {}[{}]'.format(
Fore.YELLOW + review['by'] + Fore.RESET,
Fore.CYAN + review['package'] + Fore.RESET,
review['request']))
return
+ for check in info['missing_checks']:
+ print(query_project + ' ' + Fore.MAGENTA + 'missing: {}'.format(check))
+ return
+ for check in project.get('checks', []):
+ if check['state'] != 'success':
+ print(query_project + '{} {} check: {}'.format(Fore.MAGENTA, check['state'], check['name']))
+ return
if self.api.is_user_member_of(self.api.user, self.api.cstaging_group):
- print(query_project + " " + Fore.GREEN + 'ready')
+ print(query_project + ' ' + Fore.GREEN + 'ready')
packages = []
for req in info['selected_requests']:
print(' - {} [{}]'.format(Fore.CYAN + req['package'] + Fore.RESET, req['number']))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/conf.py new/openSUSE-release-tools-20190308.7f2195f/osclib/conf.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/conf.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/conf.py 2019-03-08 13:48:06.000000000 +0100
@@ -40,7 +40,6 @@
'devel-project-enforce': 'True',
'review-team': 'opensuse-review-team',
'legal-review-group': 'legal-auto',
- 'repo-checker': 'repo-checker',
'repo_checker-no-filter': 'True',
'repo_checker-package-comment-devel': 'True',
'pkglistgen-product-family-include': 'openSUSE:Leap:N',
@@ -161,6 +160,7 @@
'staging-group': None,
'staging-archs': '',
'staging-dvd-archs': '',
+ 'staging-required-checks-adi': '',
'onlyadi': False,
'rings': None,
'nonfree': None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/core.py new/openSUSE-release-tools-20190308.7f2195f/osclib/core.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/core.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/core.py 2019-03-08 13:48:06.000000000 +0100
@@ -309,7 +309,9 @@
url = makeurl(apiurl, ['source', project], query)
root = ETL.parse(http_GET(url)).getroot()
return root.xpath(
- '//sourceinfo[not(./linked[@project="{}"]) and not(contains(@package, ":"))]/@package'.format(project))
+ '//sourceinfo[not(./linked[@project="{}"]) and '
+ 'not(contains(@package, ":"))'
+ 'and not(starts-with(@package, "00"))]/@package'.format(project))
def attribute_value_load(apiurl, project, name, namespace='OSRT'):
url = makeurl(apiurl, ['source', project, '_attribute', namespace + ':' + name])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/origin.py new/openSUSE-release-tools-20190308.7f2195f/osclib/origin.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/origin.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/origin.py 2019-03-08 13:48:06.000000000 +0100
@@ -43,6 +43,10 @@
PendingRequestInfo = namedtuple('PendingRequestInfo', ['identifier', 'reviews_remaining'])
PolicyResult = namedtuple('PolicyResult', ['wait', 'accept', 'reviews', 'comments'])
+def origin_info_str(self):
+ return self.project + ('+' if self.pending else '')
+OriginInfo.__str__ = origin_info_str
+
@memoize(session=True)
def config_load(apiurl, project):
config = attribute_value_load(apiurl, project, 'OriginConfig')
@@ -164,7 +168,7 @@
def config_resolve_create_family(apiurl, project, config, position, origin, values):
projects = project_list_family_prior_pattern(apiurl, origin, project)
for origin_expanded in reversed(projects):
- config['origins'].insert(position, { origin_expanded: values })
+ config['origins'].insert(position, { str(origin_expanded): values })
def config_resolve_apply(config, values_apply, key=None, workaround=False, until=None):
for origin, values in config_origin_generator(config['origins']):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/stagingapi.py new/openSUSE-release-tools-20190308.7f2195f/osclib/stagingapi.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/stagingapi.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/stagingapi.py 2019-03-08 13:48:06.000000000 +0100
@@ -1234,11 +1234,13 @@
return tar_pkg
- def ensure_staging_archs(self, project):
- url = self.makeurl(['source', project, '_meta'])
- meta = ET.parse(http_GET(url))
+ def project_meta_url(self, project):
+ return self.makeurl(['source', project, '_meta'])
+ def ensure_staging_archs(self, project):
+ meta = ET.parse(http_GET(self.project_meta_url(project)))
repository = meta.find('repository[@name="{}"]'.format(self.cmain_repo))
+
changed = False
for arch in self.cstaging_archs:
if not repository.xpath('./arch[text()="{}"]'.format(arch)):
@@ -1246,9 +1248,11 @@
elm.text = arch
changed = True
- if changed:
- meta = ET.tostring(meta)
- http_PUT(url, data=meta)
+ if not changed:
+ return
+
+ meta = ET.tostring(meta)
+ http_PUT(self.project_meta_url(project), data=meta)
def prj_from_letter(self, letter):
if ':' in letter: # not a letter
@@ -1703,8 +1707,24 @@
if use_frozenlinks:
self.update_adi_frozenlinks(name, src_prj)
+ for required_check in self.cstaging_required_checks_adi.split():
+ self.add_required_check(name, required_check)
return name
+ def add_required_check(self, project, check):
+ root = ET.Element('required_checks')
+ name = ET.SubElement(root, 'name')
+ name.text = check
+
+ meta = ET.parse(http_GET(self.project_meta_url(project)))
+ repository = meta.find('repository[@name="{}"]'.format(self.cmain_repo))
+
+ for arch_element in repository.findall('arch'):
+ architecture = arch_element.text
+ url = self.makeurl(['status_reports', 'built_repositories', project,
+ self.cmain_repo, architecture, 'required_checks'])
+ http_POST(url, data=ET.tostring(root))
+
def is_user_member_of(self, user, group):
root = ET.fromstring(get_group(self.apiurl, group))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/osclib/util.py new/openSUSE-release-tools-20190308.7f2195f/osclib/util.py
--- old/openSUSE-release-tools-20190305.9f97c15/osclib/util.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/osclib/util.py 2019-03-08 13:48:06.000000000 +0100
@@ -1,4 +1,6 @@
from osc import conf
+from osclib.conf import Config
+from osclib.core import entity_email
from osclib.core import project_list_prefix
from osclib.memoize import memoize
@@ -121,16 +123,22 @@
return 0
-def mail_send(project, to, subject, body, from_key='maintainer', followup_to_key='release-list', dry=False):
+def mail_send(apiurl, project, to, subject, body, from_key='maintainer',
+ followup_to_key='release-list', dry=False):
from email.mime.text import MIMEText
import email.utils
import smtplib
- config = conf.config[project]
+ config = Config.get(apiurl, project)
msg = MIMEText(body)
msg['Message-ID'] = email.utils.make_msgid()
msg['Date'] = email.utils.formatdate(localtime=1)
- msg['From'] = config['mail-{}'.format(from_key)]
+ if from_key is None:
+ msg['From'] = entity_email(apiurl, conf.get_apiurl_usr(apiurl), include_name=True)
+ else:
+ msg['From'] = config['mail-{}'.format(from_key)]
+ if '@' not in to:
+ to = config['mail-{}'.format(to)]
msg['To'] = to
followup_to = config.get('mail-{}'.format(followup_to_key))
if followup_to:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/systemd/osrt-origin-manager-report@.service new/openSUSE-release-tools-20190308.7f2195f/systemd/osrt-origin-manager-report@.service
--- old/openSUSE-release-tools-20190305.9f97c15/systemd/osrt-origin-manager-report@.service 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/systemd/osrt-origin-manager-report@.service 2019-03-08 13:48:06.000000000 +0100
@@ -0,0 +1,11 @@
+[Unit]
+Description=openSUSE Release Tools: origin-manager report for %i
+
+[Service]
+User=osrt-origin-manager
+SyslogIdentifier=osrt-origin-manager
+ExecStart=/usr/bin/osc origin -p "%i" report --diff --force-refresh --mail
+RuntimeMaxSec=12 hour
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/systemd/osrt-origin-manager-report@.timer new/openSUSE-release-tools-20190308.7f2195f/systemd/osrt-origin-manager-report@.timer
--- old/openSUSE-release-tools-20190305.9f97c15/systemd/osrt-origin-manager-report@.timer 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/systemd/osrt-origin-manager-report@.timer 2019-03-08 13:48:06.000000000 +0100
@@ -0,0 +1,9 @@
+[Unit]
+Description=openSUSE Release Tools: origin-manager report for %i
+
+[Timer]
+OnCalendar=weekly
+Unit=osrt-origin-manager-report@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20190305.9f97c15/totest-manager.py new/openSUSE-release-tools-20190308.7f2195f/totest-manager.py
--- old/openSUSE-release-tools-20190305.9f97c15/totest-manager.py 2019-03-05 16:44:43.000000000 +0100
+++ new/openSUSE-release-tools-20190308.7f2195f/totest-manager.py 2019-03-08 13:48:06.000000000 +0100
@@ -911,11 +911,6 @@
'000product:openSUSE-ftp-ftp-armv7hl',
]
- livecd_products = [ImageProduct('JeOS', ['armv7l'])]
-
- # JeOS doesn't follow build numbers of main isos
- need_same_build_number = False
-
def openqa_group(self):
return 'openSUSE Leap 15 AArch64'
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.urdSj3/_old 2019-03-10 09:40:16.148105926 +0100
+++ /var/tmp/diff_new_pack.urdSj3/_new 2019-03-10 09:40:16.148105926 +0100
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20190305.9f97c15
-mtime: 1551800683
-commit: 9f97c150b8efc516cc5f824771be3b667db6f5ab
+version: 20190308.7f2195f
+mtime: 1552049286
+commit: 7f2195fb575e100404ab88b3af710c00c88b2c2e