Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openSUSE-release-tools for
openSUSE:Factory checked in at 2021-08-31 19:55:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Tue Aug 31 19:55:38 2021 rev:318 rq:915210 version:20210831.0de63caa
Changes:
--------
---
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
2021-08-23 10:09:10.456176120 +0200
+++
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1899/openSUSE-release-tools.changes
2021-08-31 19:56:32.054025267 +0200
@@ -1,0 +2,8 @@
+Tue Aug 31 08:53:00 UTC 2021 - [email protected]
+
+- Update to version 20210831.0de63caa:
+ * Update specfile for skippkg-finder
+ * Run skippkg-finder.py before pkglistgen
+ * Add skippkg-finder.py to overwrite NON_FTP_PACKAGES for obsoleted and
unneeded package
+
+-------------------------------------------------------------------
Old:
----
openSUSE-release-tools-20210820.43b07171.obscpio
New:
----
openSUSE-release-tools-20210831.0de63caa.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.NbnALe/_old 2021-08-31 19:56:32.726026196 +0200
+++ /var/tmp/diff_new_pack.NbnALe/_new 2021-08-31 19:56:32.730026202 +0200
@@ -20,7 +20,7 @@
%define source_dir openSUSE-release-tools
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20210820.43b07171
+Version: 20210831.0de63caa
Release: 0
Summary: Tools to aid in staging and release work for openSUSE/SUSE
License: GPL-2.0-or-later AND MIT
@@ -438,6 +438,7 @@
%exclude %{_datadir}/%{source_dir}/maintenance-installcheck.py
%exclude %{_datadir}/%{source_dir}/project-installcheck.py
%exclude %{_datadir}/%{source_dir}/suppkg_rebuild.py
+%exclude %{_datadir}/%{source_dir}/skippkg-finder.py
%exclude %{_datadir}/%{source_dir}/osclib
%exclude %{_datadir}/%{source_dir}/osc-cycle.py
%exclude %{_datadir}/%{source_dir}/osc-origin.py
@@ -551,8 +552,10 @@
%files pkglistgen
%defattr(-,root,root,-)
%{_bindir}/osrt-pkglistgen
+%{_bindir}/osrt-skippkg-finder
%{_datadir}/%{source_dir}/pkglistgen
%{_datadir}/%{source_dir}/pkglistgen.py
+%{_datadir}/%{source_dir}/skippkg-finder.py
%files -n osclib
%defattr(-,root,root,-)
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.NbnALe/_old 2021-08-31 19:56:32.782026274 +0200
+++ /var/tmp/diff_new_pack.NbnALe/_new 2021-08-31 19:56:32.786026280 +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">33d44e218e9251d5dd3cc30d285c03a5a20b5b4c</param>
+ <param
name="changesrevision">2a3ee0c246daccbd3b500896fe6057c8dc04777b</param>
</service>
</servicedata>
++++++ openSUSE-release-tools-20210820.43b07171.obscpio ->
openSUSE-release-tools-20210831.0de63caa.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20210820.43b07171/dist/package/openSUSE-release-tools.spec
new/openSUSE-release-tools-20210831.0de63caa/dist/package/openSUSE-release-tools.spec
---
old/openSUSE-release-tools-20210820.43b07171/dist/package/openSUSE-release-tools.spec
2021-08-20 09:49:06.000000000 +0200
+++
new/openSUSE-release-tools-20210831.0de63caa/dist/package/openSUSE-release-tools.spec
2021-08-31 10:51:24.000000000 +0200
@@ -439,6 +439,7 @@
%exclude %{_datadir}/%{source_dir}/maintenance-installcheck.py
%exclude %{_datadir}/%{source_dir}/project-installcheck.py
%exclude %{_datadir}/%{source_dir}/suppkg_rebuild.py
+%exclude %{_datadir}/%{source_dir}/skippkg-finder.py
%exclude %{_datadir}/%{source_dir}/osclib
%exclude %{_datadir}/%{source_dir}/osc-cycle.py
%exclude %{_datadir}/%{source_dir}/osc-origin.py
@@ -552,8 +553,10 @@
%files pkglistgen
%defattr(-,root,root,-)
%{_bindir}/osrt-pkglistgen
+%{_bindir}/osrt-skippkg-finder
%{_datadir}/%{source_dir}/pkglistgen
%{_datadir}/%{source_dir}/pkglistgen.py
+%{_datadir}/%{source_dir}/skippkg-finder.py
%files -n osclib
%defattr(-,root,root,-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20210820.43b07171/gocd/pkglistgen.opensuse.gocd.yaml
new/openSUSE-release-tools-20210831.0de63caa/gocd/pkglistgen.opensuse.gocd.yaml
---
old/openSUSE-release-tools-20210820.43b07171/gocd/pkglistgen.opensuse.gocd.yaml
2021-08-20 09:49:06.000000000 +0200
+++
new/openSUSE-release-tools-20210831.0de63caa/gocd/pkglistgen.opensuse.gocd.yaml
2021-08-31 10:51:24.000000000 +0200
@@ -107,6 +107,7 @@
resources:
- repo-checker
tasks:
+ - script: python3 ./skippkg-finder.py-A https://api.opensuse.org
-o openSUSE:Leap:15.4 -s SUSE:SLE-15-SP4:GA
- script: python3 ./pkglistgen.py -d -A https://api.opensuse.org
update_and_solve -p openSUSE:Leap:15.4 -s target
Update.Repos.Leap:
group: Leap.pkglistgen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20210820.43b07171/gocd/pkglistgen.opensuse.gocd.yaml.erb
new/openSUSE-release-tools-20210831.0de63caa/gocd/pkglistgen.opensuse.gocd.yaml.erb
---
old/openSUSE-release-tools-20210820.43b07171/gocd/pkglistgen.opensuse.gocd.yaml.erb
2021-08-20 09:49:06.000000000 +0200
+++
new/openSUSE-release-tools-20210831.0de63caa/gocd/pkglistgen.opensuse.gocd.yaml.erb
2021-08-31 10:51:24.000000000 +0200
@@ -81,6 +81,7 @@
resources:
- repo-checker
tasks:
+ - script: python3 ./skippkg-finder.py-A https://api.opensuse.org
-o openSUSE:Leap:15.4 -s SUSE:SLE-15-SP4:GA
- script: python3 ./pkglistgen.py -d -A https://api.opensuse.org
update_and_solve -p <%= project[0] %><%= options %>
<% end -%>
Update.Repos.Leap:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openSUSE-release-tools-20210820.43b07171/skippkg-finder.py
new/openSUSE-release-tools-20210831.0de63caa/skippkg-finder.py
--- old/openSUSE-release-tools-20210820.43b07171/skippkg-finder.py
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20210831.0de63caa/skippkg-finder.py
2021-08-31 10:51:24.000000000 +0200
@@ -0,0 +1,372 @@
+#!/usr/bin/python3
+
+import argparse
+import logging
+import sys
+
+from urllib.error import HTTPError
+
+import re
+from lxml import etree as ET
+from collections import namedtuple
+
+import osc.conf
+import osc.core
+from osc.core import http_GET
+from osc.core import makeurl
+from osc import oscerr
+import osclib
+from osclib.core import source_file_ensure
+
+SUPPORTED_ARCHS = ['x86_64', 'i586', 'aarch64', 'ppc64le', 's390x']
+DEFAULT_REPOSITORY = 'standard'
+
+META_PACKAGE = '000package-groups'
+
+class SkippkgFinder(object):
+ def __init__(self, opensuse_project, sle_project, print_only, verbose):
+ self.opensuse_project = opensuse_project
+ self.sle_project = sle_project
+ self.print_only = print_only
+ self.verbose = verbose
+ self.apiurl = osc.conf.config['apiurl']
+ self.debug = osc.conf.config['debug']
+
+ def is_sle_specific(self, package):
+ """
+ Return True if package is provided for SLE only or a SLE forking.
+ Add new condition here if you do not want package being added to
+ selected_binarylist[].
+ """
+ pkg = package.lower()
+ prefixes = (
+ 'desktop-data',
+ 'libyui-bindings',
+ 'libyui-doc',
+ 'libyui-ncurses',
+ 'libyui-qt',
+ 'libyui-rest',
+ 'lifecycle-data-sle',
+ 'kernel-livepatch',
+ 'kiwi-template',
+ 'mgr-',
+ 'migrate',
+ 'patterns',
+ 'release-notes',
+ 'sap',
+ 'sca-',
+ 'skelcd',
+ 'sle-',
+ 'sle_',
+ 'sle15',
+ 'sles15',
+ 'spacewalk',
+ 'supportutils-plugin',
+ 'suse-migration',
+ 'susemanager-',
+ 'yast2-hana'
+ )
+ suffixes = (
+ '-caasp',
+ '-sle',
+ 'bootstrap'
+ )
+ matches = (
+ 'gtk-vnc2',
+ 'ibus-googlepinyin',
+ 'infiniband-diags',
+ 'llvm',
+ 'lua51-luajit',
+ 'lvm2-clvm',
+ 'osad',
+ 'rhncfg',
+ 'python-ibus',
+ 'python-pymemcache',
+ 'suse-build-key',
+ 'suse-hpc',
+ 'txt2tags',
+ 'zypp-plugin-spacewalk',
+ 'zypper-search-packages-plugin'
+ )
+ if pkg.startswith(prefixes) or pkg.endswith(suffixes) or pkg in
matches:
+ return True
+ if 'sles' in pkg or\
+ 'sled' in pkg or\
+ 'sap-' in pkg or\
+ '-sap' in pkg or\
+ 'eula' in pkg or\
+ 'branding' in pkg:
+ return True
+ return False
+
+ def get_packagelist(self, project, by_project=True):
+ """
+ Return the list of package's info of a project.
+ If the latest package is from an incident then returns incident
+ package.
+ """
+
+ pkglist = {}
+ packageinfo = {}
+ query = {'expand': 1}
+ root = ET.parse(http_GET(makeurl(self.apiurl, ['source', project],
+ query=query))).getroot()
+ for i in root.findall('entry'):
+ pkgname = i.get('name')
+ orig_project = i.get('originproject')
+ is_incidentpkg = False
+ # Metapackage should not be selected
+ if pkgname.startswith('000') or\
+ pkgname.startswith('_') or\
+ pkgname.startswith('patchinfo.') or\
+ pkgname.startswith('skelcd-') or\
+ pkgname.startswith('installation-images') or\
+ pkgname.endswith('-mini'):
+ continue
+ # Ugly hack for package has dot in source package name
+ # eg. go1.x incidents as the name would be go1.x.xxx
+ if '.' in pkgname and re.match(r'[0-9]+$', pkgname.split('.')[-1])
and \
+ orig_project.startswith('SUSE:') and
orig_project.endswith(':Update'):
+ is_incidentpkg = True
+ if pkgname.startswith('go1') or\
+ pkgname.startswith('bazel0') or\
+ pkgname.startswith('dotnet') or\
+ pkgname.startswith('rust1') or\
+ pkgname.startswith('ruby2'):
+ if not (pkgname.count('.') > 1):
+ is_incidentpkg = False
+
+ # If an incident found then update the package origin info
+ if is_incidentpkg:
+ orig_name = re.sub(r'\.[0-9]+$', '', pkgname)
+ incident_number = int(pkgname.split('.')[-1])
+ if orig_name in pkglist and pkglist[orig_name]['Project'] ==
orig_project:
+ if re.match(r'[0-9]+$',
pkglist[orig_name]['Package'].split('.')[-1]):
+ old_incident_number =
int(pkglist[orig_name]['Package'].split('.')[-1])
+ if incident_number > old_incident_number:
+ pkglist[orig_name]['Package'] = pkgname
+ else:
+ pkglist[orig_name]['Package'] = pkgname
+ else:
+ pkglist[pkgname] = {'Project': orig_project, 'Package':
pkgname}
+
+ if by_project:
+ for pkg in pkglist.keys():
+ if pkglist[pkg]['Project'].startswith('SUSE:') and
self.is_sle_specific(pkg):
+ continue
+ if pkglist[pkg]['Project'] not in packageinfo:
+ packageinfo[pkglist[pkg]['Project']] = []
+ if pkglist[pkg]['Package'] not in
packageinfo[pkglist[pkg]['Project']]:
+
packageinfo[pkglist[pkg]['Project']].append(pkglist[pkg]['Package'])
+ return packageinfo
+
+ return pkglist
+
+ def get_project_binary_list(self, project, repository, arch,
package_binaries={}):
+ """
+ Returns binarylist of a project
+ """
+
+ # Use pool repository for SUSE namespace project.
+ # Because RPMs were injected to pool repository on OBS rather than
+ # standard repository.
+ if project.startswith('SUSE:'):
+ repository = 'pool'
+
+ path = ['build', project, repository, arch]
+ url = makeurl(self.apiurl, path, {'view': 'binaryversions'})
+ root = ET.parse(http_GET(url)).getroot()
+
+ for binary_list in root:
+ package = binary_list.get('package')
+ package = package.split(':', 1)[0]
+ index = project + "_" + package
+
+ if index not in package_binaries:
+ package_binaries[index] = []
+ for binary in binary_list:
+ filename = binary.get('name')
+ result = re.match(osclib.core.RPM_REGEX, filename)
+ if not result:
+ continue
+
+ if result.group('arch') == 'src' or result.group('arch') ==
'nosrc':
+ continue
+ if result.group('name').endswith('-debuginfo') or
result.group('name').endswith('-debuginfo-32bit'):
+ continue
+ if result.group('name').endswith('-debugsource'):
+ continue
+
+ if result.group('name') not in package_binaries[index]:
+ package_binaries[index].append(result.group('name'))
+
+ return package_binaries
+
+ def exception_package(self, package):
+ """
+ Do not skip the package if matches the condition.
+ package parameter is source package name.
+ """
+
+ if '-bootstrap' in package or\
+ 'Tumbleweed' in package or\
+ 'metis' in package:
+ return True
+ # These packages must have a good reason not to be single-speced
+ # from one source.
+ if package.startswith('python2-') or\
+ package.startswith('python3'):
+ return True
+ return False
+
+ def exception_binary(self, package):
+ """
+ Do not skip the binary if matches the condition
+ package parameter is RPM filename.
+ """
+
+ if package == 'openSUSE-release' or\
+ package == 'openSUSE-release-ftp' or\
+ package == 'openSUSE-Addon-NonOss-release':
+ return True
+ return False
+
+ def crawl(self):
+ """Main method"""
+
+ leap_pkglist = self.get_packagelist(self.opensuse_project)
+ sle_pkglist = self.get_packagelist(self.sle_project, by_project=False)
+ # The selected_binarylist[] includes the latest sourcepackage list
+ # binary RPMs from the latest sources need to be presented in ftp
eventually
+ selected_binarylist = []
+ # Any existed binary RPMs from any SPx/Leap/Backports
+ fullbinarylist = []
+ # package_binaries[] is a pre-formated binarylist per each package
+ # access to the conotent uses
package_binaries['SUSE:SLE-15:Update_libcdio.12032']
+ package_binaries = {}
+
+ # Inject binarylist to a list per package name no matter what
archtectures was
+ for arch in SUPPORTED_ARCHS:
+ for prj in leap_pkglist.keys():
+ package_binaries = self.get_project_binary_list(prj,
DEFAULT_REPOSITORY, arch, package_binaries)
+
+ for pkg in package_binaries.keys():
+ if not self.exception_package(pkg):
+ fullbinarylist += package_binaries[pkg]
+
+ for prj in leap_pkglist.keys():
+ for pkg in leap_pkglist[prj]:
+ cands = [prj + "_" + pkg]
+ # Handling for SLE forks, or package has different multibuild
bits
+ # enablility between SLE and openSUSE
+ if prj.startswith('openSUSE:') and pkg in sle_pkglist and\
+ not self.is_sle_specific(pkg):
+ cands.append(sle_pkglist[pkg]['Project'] + "_" +
sle_pkglist[pkg]['Package'])
+ logging.debug(cands)
+ for index in cands:
+ if index in package_binaries:
+ selected_binarylist += package_binaries[index]
+ else:
+ logging.info("Can not find binary of %s" % index)
+
+ # Some packages has been obsoleted by new updated package, however
+ # there are application still depend on old library when it builds
+ # eg. SUSE:SLE-15-SP3:GA has qpdf/libqpdf28 but cups-filter was build
+ # in/when SLE15 SP2 which requiring qpdf/libqpdf6, therefore old
+ # qpdf/libqpdf6 from SLE15 SP2 should not to be missed.
+ extra_packagelist = [
+ # gnome-software requirement
+ 'SUSE:SLE-15-SP2:Update_libxmlb.15999',
+ # cups-filter requirement
+ 'SUSE:SLE-15-SP2:GA_qpdf',
+ # libcdio_paranoia2 requirement
+ 'SUSE:SLE-15:Update_libcdio.12032',
+ # libstoken1 requirement
+ 'SUSE:SLE-15:Update_libnettle.19992',
+ # python2-Pillow requirement
+ 'SUSE:SLE-15:Update_libwebp.19719',
+ # amarok requirement
+ 'SUSE:SLE-15:Update_mariadb.20531',
+ # bogofilter requirement
+ 'SUSE:SLE-15:GA_gsl',
+ # gnome-builder requirement
+ 'SUSE:SLE-15-SP2:GA_vala',
+ # hfst-ospell requirement
+ 'SUSE:SLE-15:Update_icu.14528'
+ ]
+ for pkg in extra_packagelist:
+ selected_binarylist += package_binaries[pkg]
+
+ # Preparing a packagelist for the skipping candidate
+ obsoleted = []
+ for pkg in fullbinarylist:
+ if pkg not in selected_binarylist and pkg not in obsoleted:
+ if not self.exception_binary(pkg):
+ obsoleted.append(pkg)
+
+ # Post processing of obsoleted packagelist
+ tmp_obsoleted = obsoleted.copy()
+ for pkg in tmp_obsoleted:
+ # Respect to single-speced python package, when a python2 RPM is
+ # considered then a python3 flavor should also be selected to be
+ # skipped, if not, don't add it.
+ if pkg.startswith('python2-') and re.sub(r'^python2', 'python3',
pkg) not in obsoleted:
+ obsoleted.remove(pkg)
+ # Main RPM must to be skipped if -32 bit RPM or -64bit RPM is
+ # considered.
+ if pkg.endswith('-32bit') or pkg.endswith('-64bit'):
+ main_filename = re.sub('-[36][24]bit', '', pkg)
+ if main_filename not in obsoleted:
+ obsoleted.remove(pkg)
+
+ skip_list = ET.Element('group', {'name': 'NON_FTP_PACKAGES'})
+ ET.SubElement(skip_list, 'conditional', {'name': 'drop_from_ftp'})
+ packagelist = ET.SubElement(skip_list, 'packagelist', {'relationship':
'requires'})
+ for pkg in sorted(obsoleted):
+ if not self.print_only and self.verbose:
+ print(pkg)
+ attr = {'name': pkg}
+ ET.SubElement(packagelist, 'package', attr)
+ if not self.print_only:
+ source_file_ensure(self.apiurl, self.opensuse_project,
META_PACKAGE, 'NON_FTP_PACKAGES.group',
+ ET.tostring(skip_list, pretty_print=True,
encoding='unicode'),
+ 'Update the skip list')
+ else:
+ print(ET.tostring(skip_list, pretty_print=True,
+ encoding='unicode'))
+
+
+def main(args):
+ osc.conf.get_config(override_apiurl=args.apiurl)
+ osc.conf.config['debug'] = args.debug
+
+ if args.opensuse_project is None or args.sle_project is None:
+ print("Please pass --opensuse-project and --sle-project argument. See
usage with --help.")
+ quit()
+
+ uc = SkippkgFinder(args.opensuse_project, args.sle_project,
args.print_only, args.verbose)
+ uc.crawl()
+
+
+if __name__ == '__main__':
+ description = 'Overwrites NON_FTP_PACKAGES.group according to the latest
sources. '\
+ 'This tool only works for Leap after CtLG implemented.'
+ parser = argparse.ArgumentParser(description=description)
+ parser.add_argument('-A', '--apiurl', metavar='URL', help='API URL')
+ parser.add_argument('-d', '--debug', action='store_true',
+ help='print info useful for debuging')
+ parser.add_argument('-o', '--opensuse-project', dest='opensuse_project',
metavar='OPENSUSE_PROJECT',
+ help='openSUSE project on buildservice')
+ parser.add_argument('-s', '--sle-project', dest='sle_project',
metavar='SLE_PROJECT',
+ help='SLE project on buildservice')
+ parser.add_argument('-p', '--print-only', action='store_true',
+ help='show the result instead of the uploading')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='show the diff')
+
+ args = parser.parse_args()
+
+ logging.basicConfig(level=logging.DEBUG if args.debug
+ else logging.INFO)
+
+ sys.exit(main(args))
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.NbnALe/_old 2021-08-31 19:56:33.630027448 +0200
+++ /var/tmp/diff_new_pack.NbnALe/_new 2021-08-31 19:56:33.630027448 +0200
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20210820.43b07171
-mtime: 1629445746
-commit: 43b07171ad85c0edbf2f11ec0853a32672e378d3
+version: 20210831.0de63caa
+mtime: 1630399884
+commit: 0de63caa85db778ad9f6909093f87bedb11cad02