Hello community, here is the log from the commit of package osc for openSUSE:Factory checked in at 2020-03-05 23:23:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/osc (Old) and /work/SRC/openSUSE:Factory/.osc.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osc" Thu Mar 5 23:23:01 2020 rev:145 rq:781771 version:0.168.0 Changes: -------- --- /work/SRC/openSUSE:Factory/osc/osc.changes 2020-01-07 23:56:23.960126175 +0100 +++ /work/SRC/openSUSE:Factory/.osc.new.26092/osc.changes 2020-03-05 23:23:21.821346599 +0100 @@ -1,0 +2,42 @@ +Thu Mar 5 08:30:46 UTC 2020 - Marco Strigl <[email protected]> + +- Spec: + * fix destination of fish completion file to /usr/share/fish/vendor_completions.d + +------------------------------------------------------------------- +Wed Mar 4 09:27:41 UTC 2020 - Marco Strigl <[email protected]> + +- 0.168.0 + * MR creation honors orev now (bsc#1160446) + * allow "osc r --vertical" for projects + * several typo fixes + * cleanup old functions and remove python2.6 compat code + * support zstd arch linux files in local build + * fix deleterequest for repositories + * append --norootforbuild as default to build command + * fix decoding in interactive request mode + * use signdummy for product builds + * print release project when creating MR + * improve SSLError message for TLSv1 validation + * osc maintained --version prints the version of each maintained package + * print web url links after creating requests (New general bool option 'print_web_links' must be set in oscrc) + * fix checkout_no_colon on project level + * handle empty release number of rpm packages in build.py + * handle bytes vs. str error when parsing meta + * custom exception if importing m2crypto fails + * fix missing oscerr import in util.helper + * several fixes for keyring handling + * fix arch zst magic in util.packagequery + +------------------------------------------------------------------- +Fri Feb 28 12:27:27 UTC 2020 - Frederic Crozat <[email protected]> + +- Ship fish completion file. + +------------------------------------------------------------------- +Tue Feb 11 16:39:17 UTC 2020 - Fabian Vogt <[email protected]> + +- Spec: + * Recommend python3-keyring when using python3 + +------------------------------------------------------------------- Old: ---- debian.tar.gz osc-0.167.2.tar.gz New: ---- debian.compat debian.control debian.copyright debian.dirs debian.docs debian.osc.dirs debian.osc.install debian.osc.links debian.rules osc-0.168.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ osc.spec ++++++ --- /var/tmp/diff_new_pack.gakT2Z/_old 2020-03-05 23:23:23.993347794 +0100 +++ /var/tmp/diff_new_pack.gakT2Z/_new 2020-03-05 23:23:24.005347801 +0100 @@ -27,18 +27,21 @@ %define use_python python %endif -%define version_unconverted 0.167.2 +%define version_unconverted 0.168.0 %define osc_plugin_dir %{_prefix}/lib/osc-plugins %define macros_file macros.osc Name: osc -Version: 0.167.2 +Version: 0.168.0 Release: 0 Summary: Open Build Service Commander License: GPL-2.0-or-later Group: Development/Tools/Other URL: https://github.com/openSUSE/osc Source: %{name}-%{version}.tar.gz +Source1: debian.dirs +Source2: debian.docs +Source3: debian.osc.links BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: %{use_python}-devel BuildRequires: %{use_python}-setuptools @@ -90,8 +93,12 @@ %endif # needed for storing credentials in kwallet/gnome-keyring %if 0%{?suse_version} > 1000 || 0%{?mandriva_version} || 0%{?mdkversion} +%if %{with python3} +Recommends: python3-keyring +%else Recommends: python-keyring %endif +%endif %if 0%{?rhel_version} && 0%{?rhel_version} < 600 BuildRequires: python-elementtree Requires: python-elementtree @@ -167,6 +174,8 @@ install -Dm0755 dist/osc.complete %{buildroot}%{_libdir}/osc/complete %endif +install -Dm0755 osc.fish %{buildroot}%{_datadir}/fish/completions/vendor_completions.d/osc.fish + install -m644 %{macros_file} -D %{buildroot}%{_sysconfdir}/rpm/%{macros_file} %if 0%{?suse_version} >= 1500 @@ -202,6 +211,7 @@ %else %{_libdir}/osc %endif +%{_datadir}/fish %dir %{osc_plugin_dir} %changelog ++++++ PKGBUILD ++++++ --- /var/tmp/diff_new_pack.gakT2Z/_old 2020-03-05 23:23:24.085347845 +0100 +++ /var/tmp/diff_new_pack.gakT2Z/_new 2020-03-05 23:23:24.085347845 +0100 @@ -1,19 +1,24 @@ pkgname=osc -pkgver=0.167.2 +pkgver=0.168.0 pkgrel=0 pkgdesc="Open Build Service client" -arch=('i686' 'x86_64') +arch=('x86_64') url="https://www.github.com/openSUSE/osc" license=('GPL-2.0+' 'GPL-2.0') groups=('base-devel') -depends=('python2' 'python2-m2crypto' 'urlgrabber') +depends=('python-m2crypto') +makedepends=('python-setuptools') source=(osc-${pkgver}.tar.gz) md5sums=('SKIP') +build() { + cd "${srcdir}"/osc-${pkgver} + python setup.py build +} + package() { msg "Installing osc ..." cd "${srcdir}"/osc-${pkgver} - python2 setup.py build - python2 setup.py install --prefix=/usr --root=${pkgdir} + python setup.py install --root="${pkgdir}/" --optimize=1 --prefix=/usr ln -s osc-wrapper.py ${pkgdir}/usr/bin/osc } ++++++ _service ++++++ --- /var/tmp/diff_new_pack.gakT2Z/_old 2020-03-05 23:23:24.125347867 +0100 +++ /var/tmp/diff_new_pack.gakT2Z/_new 2020-03-05 23:23:24.125347867 +0100 @@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="disabled"> - <param name="version">0.167.2</param> - <param name="revision">0.167.2</param> + <param name="version">0.168.0</param> + <param name="revision">0.168.0</param> <param name="url">git://github.com/openSUSE/osc.git</param> <param name="scm">git</param> </service> ++++++ debian.changelog ++++++ --- /var/tmp/diff_new_pack.gakT2Z/_old 2020-03-05 23:23:24.173347893 +0100 +++ /var/tmp/diff_new_pack.gakT2Z/_new 2020-03-05 23:23:24.177347896 +0100 @@ -1,7 +1,7 @@ -osc (0.167.2) unstable; urgency=low - - Update to 0.161.1 +osc (0.168.0) unstable; urgency=low + - Package for Python3 - -- Marco Strigl <[email protected]> Thu, 26 Oct 2017 14:42:00 +0200 + -- Nick Brown <[email protected]> Wed, 30 Jan 2020 14:49:30 +0000 osc (0.161.0-0) unstable; urgency=low - Install bash completion ++++++ debian.compat ++++++ 9 ++++++ debian.control ++++++ Source: osc Priority: extra Maintainer: Adrian Schroeter <[email protected]>, Rene Engelhard <[email protected]> Build-Depends: debhelper (>= 9), dh-python, python3-all, python3-setuptools Standards-Version: 3.7.1 Section: devel Package: osc Section: devel Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}, python3, build | obs-build Recommends: python3-progressbar, python3-rpm, python3-keyring, python3-m2crypto, bash-completion Suggests: sudo Description: Open Build Service Commander Commandline client for the Open Build Service. ++++++ debian.copyright ++++++ This package was debianized by J.H.M. Dassen (Ray) <[email protected]> on Fri, 12 May 2006 14:12:04 +0200. It was downloaded from www.opensuse.org Upstream Author: Peter Poeml <[email protected]> Copyright Holder: Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. License: # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine # package are under the same license as the package itself. osc itself is GPL, for the full text of the GPL see /usr/share/common-licenses/GPL ++++++ debian.dirs ++++++ usr/bin usr/sbin usr/share/man ++++++ debian.docs ++++++ README TODO ++++++ debian.osc.dirs ++++++ usr/lib usr/lib/osc usr/include etc/bash_completion.d etc/profile.d ++++++ debian.osc.install ++++++ usr/lib/osc/complete etc/profile.d/osc.csh etc/bash_completion.d/osc.sh ++++++ debian.osc.links ++++++ usr/bin/osc-wrapper.py usr/bin/osc ++++++ debian.rules ++++++ #!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export PYBUILD_NAME=osc %: dh $@ --with python3 --buildsystem=pybuild override_dh_auto_install: dh_auto_install install -Dm0644 dist/complete.csh debian/tmp/etc/profile.d/osc.csh install -Dm0644 dist/complete.sh debian/tmp/etc/bash_completion.d/osc.sh install -Dm0755 dist/osc.complete debian/tmp/usr/lib/osc/complete ++++++ osc-0.167.2.tar.gz -> osc-0.168.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/NEWS new/osc-0.168.0/NEWS --- old/osc-0.167.2/NEWS 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/NEWS 2020-03-04 10:21:17.000000000 +0100 @@ -1,3 +1,25 @@ +0.168.0 + - MR creation honors orev now (bsc#1160446) + - allow "osc r --vertical" for projects + - several typo fixes + - cleanup old functions and remove python2.6 compat code + - support zstd arch linux files in local build + - fix deleterequest for repositories + - append --norootforbuild as default to build command + - fix decoding in interactive request mode + - use signdummy for product builds + - print release project when creating MR + - improve SSLError message for TLSv1 validation + - osc maintained --version prints the version of each maintained package + - print web url links after creating requests (New general bool option 'print_web_links' must be set in oscrc) + - fix checkout_no_colon on project level + - handle empty release number of rpm packages in build.py + - handle bytes vs. str error when parsing meta + - custom exception if importing m2crypto fails + - fix missing oscerr import in util.helper + - several fixes for keyring handling + - fix arch zst magic in util.packagequery + 0.167.2 - fix regression in osc chroot - fix broken importsrcpkg diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/OscConfigParser.py new/osc-0.168.0/osc/OscConfigParser.py --- old/osc-0.167.2/osc/OscConfigParser.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/OscConfigParser.py 2020-03-04 10:21:17.000000000 +0100 @@ -19,9 +19,11 @@ if sys.version_info >= ( 3, ): import configparser + ConfigParser = configparser.ConfigParser else: #python 2.x import ConfigParser as configparser + ConfigParser = configparser.SafeConfigParser import re @@ -188,7 +190,7 @@ self.format(line) def format(self, line): - mo = configparser.ConfigParser.OPTCRE.match(line.strip()) + mo = ConfigParser.OPTCRE.match(line.strip()) key, val = mo.group('option', 'value') self.frmt = line.replace(key.strip(), '%s', 1) pos = val.find(' ;') @@ -201,7 +203,7 @@ return self.value -class OscConfigParser(configparser.SafeConfigParser): +class OscConfigParser(ConfigParser): """ OscConfigParser() behaves like a normal ConfigParser() object. The only differences is that it preserves the order+format of configuration entries @@ -210,7 +212,7 @@ class. """ def __init__(self, defaults={}): - configparser.SafeConfigParser.__init__(self, defaults) + ConfigParser.__init__(self, defaults) self._sections = ConfigLineOrder() # XXX: unfortunately we have to override the _read() method from the ConfigParser() @@ -319,7 +321,7 @@ fp.write(str(self)) fp.write('\n') else: - configparser.SafeConfigParser.write(self, fp) + ConfigParser.write(self, fp) def has_option(self, section, option, proper=False, **kwargs): """ @@ -329,7 +331,7 @@ """ if proper: return self.optionxform(option) in self._sections[section].keys() - return configparser.SafeConfigParser.has_option(self, section, option, **kwargs) + return ConfigParser.has_option(self, section, option, **kwargs) # XXX: simplify! def __str__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/babysitter.py new/osc-0.168.0/osc/babysitter.py --- old/osc-0.167.2/osc/babysitter.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/babysitter.py 2020-03-04 10:21:17.000000000 +0100 @@ -22,8 +22,10 @@ from M2Crypto.SSL.Checker import SSLVerificationError from M2Crypto.SSL import SSLError as SSLError except: - SSLError = None - SSLVerificationError = None + class SSLError(Exception): + pass + class SSLVerificationError(Exception): + pass try: # import as RPMError because the class "error" is too generic @@ -172,6 +174,8 @@ except RPMError as e: print(e, file=sys.stderr) except SSLError as e: + if 'tlsv1' in str(e): + print('The python on this system does not support TLSv1.2', file=sys.stderr) print("SSL Error:", e, file=sys.stderr) except SSLVerificationError as e: print("Certificate Verification Error:", e, file=sys.stderr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/build.py new/osc-0.168.0/osc/build.py --- old/osc-0.167.2/osc/build.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/build.py 2020-03-04 10:21:17.000000000 +0100 @@ -240,7 +240,7 @@ elif pacsuffix == 'arch': canonname = archquery.ArchQuery.filename(self.mp['name'].encode(), epoch, self.mp['version'].encode(), release, self.mp['arch'].encode()) else: - canonname = rpmquery.RpmQuery.filename(self.mp['name'].encode(), epoch, self.mp['version'].encode(), release, self.mp['arch'].encode()) + canonname = rpmquery.RpmQuery.filename(self.mp['name'].encode(), epoch, self.mp['version'].encode(), release or b'0', self.mp['arch'].encode()) self.mp['canonname'] = decode_it(canonname) # maybe we should rename filename key to binary @@ -424,7 +424,7 @@ if type == 'dsc' or type == 'collax' or type == 'livebuild': suffix = '*.deb' elif type == 'arch': - suffix = '*.pkg.tar.xz' + suffix = '*.pkg.tar.*' for dir in dirs: # check for repodata @@ -537,7 +537,7 @@ % {'repo': repo, 'arch': arch, 'project': prj, 'package': pac, 'apihost': apihost} return buildroot -def run_build(*args): +def run_build(opts, *args): cmd = [config['build-cmd']] cmd += args @@ -548,6 +548,8 @@ cmd = sucmd + ['-s', cmd[0], 'root', '--'] + cmd[1:] else: cmd = sucmd + cmd + if not opts.userootforbuild: + cmd.append('--norootforbuild') return run_external(cmd[0], *cmd[1:]) def main(apiurl, opts, argv): @@ -1120,12 +1122,16 @@ root = tree.getroot() # product + if root.find('instsource'): + # leads to unsigned media, but avoids build failure + buildargs.append('--signdummy') + for xml in root.findall('instsource'): found_obsrepositories = 0 for node in xml.findall('instrepo'): if node and node.find('source').get('path') == 'obsrepositories:/': - found_obsrepositories = found_obsrepositories + 1 for path in bi.pathes: + found_obsrepositories += 1 new_node = ET.SubElement(xml, 'instrepo') new_node.set('name', node.get('name') + "_" + str(found_obsrepositories)) new_node.set('priority', node.get('priority')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/commandline.py new/osc-0.168.0/osc/commandline.py --- old/osc-0.167.2/osc/commandline.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/commandline.py 2020-03-04 10:21:17.000000000 +0100 @@ -1460,7 +1460,15 @@ dst_project, dst_package, opts.message, orev=rev, src_update=src_update, dst_updatelink=opts.update_link) + print('created request id', result) + if conf.config['print_web_links']: + root = ET.fromstring(b''.join(show_configuration(apiurl))) + node = root.find('obs_url') + if node is None or not node.text: + raise oscerr.APIError('obs_url configuration element expected') + obs_url = node.text + print('%s/request/show/%s' % (obs_url, result)) if supersede_existing: for req in reqs: @@ -2006,7 +2014,7 @@ else: raise oscerr.WrongArgs('Please specify at least a project.') - if not opts.all and package is None: + if not opts.all and package is None and not opts.repository: raise oscerr.WrongOptions('No package name has been provided. Use --all option, if you want to request to delete the entire project.') if opts.repository: @@ -2191,7 +2199,7 @@ osc request accept [-m TEXT] ID osc request approve [-m TEXT] ID - osc request cancelapprove [-m TEXT] ID + osc request cancelapproval [-m TEXT] ID osc request decline [-m TEXT] ID osc request revoke [-m TEXT] ID osc request reopen [-m TEXT] ID @@ -3283,7 +3291,10 @@ target_project = project.get('name') if opts.incident: target_project += ":" + opts.incident - print('Using target project \'%s\'' % target_project) + release_in = '' + if release_project is not None: + release_in = '. (release in \'%s\')' % release_project + print('Using target project \'%s\'%s' % (target_project, release_in)) if not opts.message: opts.message = edit_message() @@ -3324,6 +3335,8 @@ @cmdln.option('--nodevelproject', action='store_true', help='do not follow a defined devel project ' \ '(primary project where a package is developed)') + @cmdln.option('--version', action='store_true', + help='print version of maintained package') @cmdln.alias('sm') @cmdln.alias('maintained') def do_mbranch(self, subcmd, opts, *args): @@ -3381,6 +3394,12 @@ if opts.dryrun: for r in result.findall('package'): line="%s/%s"%(r.get('project'), r.get('package')) + if opts.version: + sr = get_source_rev(apiurl, r.get('project'), r.get('package')) + version = sr.get('version') + if not version or version == 'unknown': + version = 'unknown' + line = line + (' (version: %s)' % version) for d in r.findall('devel'): line+=" using sources from %s/%s"%(d.get('project'), d.get('package')) print(line) @@ -4505,6 +4524,8 @@ elif project: prj_dir = opts.output_dir if opts.output_dir else project + if not opts.output_dir and conf.config['checkout_no_colon']: + prj_dir = prj_dir.replace(':', '/') if sys.platform[:3] == 'win': prj_dir = prj_dir.replace(':', ';') if os.path.exists(prj_dir): @@ -5248,6 +5269,8 @@ help='Disable results for all direct affect packages inside of the project') @cmdln.option('-M', '--multibuild-package', action='append', default=[], help='Only show results for the specified multibuild package') + @cmdln.option('-V', '--vertical', action='store_true', + help='list packages vertically instead horizontally for entire project') @cmdln.option('-w', '--watch', action='store_true', help='watch the results until all finished building') @cmdln.option('', '--xml', action='store_true', default=False, @@ -5292,7 +5315,6 @@ opts.hide_legend = None opts.name_filter = None opts.status_filter = None - opts.vertical = None opts.show_non_building = None opts.show_excluded = None return self.do_prjresults('prjresults', opts, *args) @@ -6470,7 +6492,7 @@ build_args = ['--root=' + build_root, '--noinit', '--shell'] if opts.wipe: build_args.append('--wipe') - sys.exit(osc.build.run_build(*build_args)) + sys.exit(osc.build.run_build(opts, *build_args)) elif subcmd in ('shell', 'chroot') or opts.shell: print('--shell in combination with build-type %s is experimental.' % vm_chroot) print('The semantics may change at any time!') @@ -7878,6 +7900,8 @@ title = opts.title if opts.name: pac = opts.name + elif pac is not None: + pac = pac.decode() if opts.description: descr = opts.description @@ -7886,7 +7910,6 @@ print('please specify a package name with the \'--name\' option. ' \ 'The automatic detection failed', file=sys.stderr) sys.exit(1) - pac = pac.decode() if conf.config['do_package_tracking']: createPackageDir(os.path.join(project.dir, pac), project) else: @@ -7899,7 +7922,7 @@ 'name': pac, 'user': user}), apiurl=apiurl) if data: - data = ET.fromstring(''.join(data)) + data = ET.fromstring(parse_meta_to_string(data)) data.find('title').text = ''.join(title) data.find('description').text = ''.join(descr) data.find('url').text = url diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/conf.py new/osc-0.168.0/osc/conf.py --- old/osc-0.167.2/osc/conf.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/conf.py 2020-03-04 10:21:17.000000000 +0100 @@ -151,6 +151,8 @@ 'exclude_glob': '.osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.vctmp.*', # whether to keep passwords in plaintext (deprecated (see creds manager)). 'plaintext_passwd': '0', + # whether to print Web UI links to directly insert in browser (where possible) + 'print_web_links': '0', # limit the age of requests shown with 'osc req list'. # this is a default only, can be overridden by 'osc req list -D NNN' # Use 0 for unlimted. @@ -198,7 +200,7 @@ 'checkout_no_colon', 'checkout_rooted', 'check_for_request_on_action', 'linkcontrol', 'show_download_progress', 'request_show_interactive', 'request_show_source_buildstatus', 'review_inherit_group', 'use_keyring', 'gnome_keyring', 'no_verify', 'builtin_signature_check', 'http_full_debug', 'include_request_from_project', 'local_service_run', 'buildlog_strip_time', 'no_preinstallimage', - 'status_mtime_heuristic'] + 'status_mtime_heuristic', 'print_web_links'] integer_opts = ['build-jobs'] api_host_options = ['user', 'pass', 'passx', 'aliases', 'http_headers', 'realname', 'email', 'sslcertck', 'cafile', 'capath', 'trusted_prj'] @@ -591,14 +593,6 @@ HTTPConnection.send = filterhdrs(HTTPConnection.send, True, 'Cookie', 'Authorization') HTTPResponse.begin = filterhdrs(HTTPResponse.begin, False, 'header: Set-Cookie.*\n') - if sys.version_info < (2, 6): - # HTTPS proxy is not supported in old urllib2. It only leads to an error - # or, at best, a warning. - if 'https_proxy' in os.environ: - del os.environ['https_proxy'] - if 'HTTPS_PROXY' in os.environ: - del os.environ['HTTPS_PROXY'] - if config['http_debug']: # brute force def urllib2_debug_init(self, debuglevel=0): @@ -1024,7 +1018,7 @@ def select_credentials_manager_descr(): if not credentials.has_keyring_support(): - print('To use keyrings please install python-keyring.') + print('To use keyrings please install python%d-keyring.' % sys.version_info.major) creds_mgr_descriptors = credentials.get_credentials_manager_descriptors() for i, creds_mgr_descr in enumerate(creds_mgr_descriptors, 1): print('%d) %s (%s)' % (i, creds_mgr_descr.name(), creds_mgr_descr.description()))# diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/core.py new/osc-0.168.0/osc/core.py --- old/osc-0.167.2/osc/core.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/core.py 2020-03-04 10:21:17.000000000 +0100 @@ -5,7 +5,7 @@ from __future__ import print_function -__version__ = '0.167.2' +__version__ = '0.168.0' # __store_version__ is to be incremented when the format of the working copy # "store" changes in an incompatible way. Please add any needed migration @@ -3808,6 +3808,19 @@ return makeurl(apiurl, [path], query) +def parse_meta_to_string(data): + """ + Converts the output of meta_exists into a string value + """ + # data can be a bytes object, a list with strings, a list with bytes, just a string. + # So we need the following even if it is ugly. + if sys.version_info >= (3, 0): + if isinstance(data, bytes): + data = decode_it(data) + elif isinstance(data, list): + data = decode_list(data) + return ''.join(data) + def edit_meta(metatype, path_args=None, @@ -3837,19 +3850,7 @@ if metatype == 'pkg': # check if the package is a link to a different project project, package = path_args - # data can be a bytes object, a list with strings, a list with bytes, just a string. - # So we need the following even if it is ugly. - if sys.version_info >= (3, 0): - if isinstance(data, bytes): - data = decode_it(data) - orgprj = ET.fromstring(''.join(data)).get('project') - elif isinstance(data, list): - decode_data = decode_list(data) - orgprj = ET.fromstring(''.join(decode_data)).get('project') - else: - orgprj = ET.fromstring(''.join(data)).get('project') - else: - orgprj = ET.fromstring(''.join(data)).get('project') + orgprj = ET.fromstring(parse_meta_to_string(data)).get('project') if orgprj is not None and unquote(project) != orgprj: print('The package is linked from a different project.') @@ -4186,12 +4187,12 @@ return r # create a maintenance incident per request -def create_maintenance_request(apiurl, src_project, src_packages, tgt_project, tgt_releaseproject, opt_sourceupdate, message='', enforce_branching=False): +def create_maintenance_request(apiurl, src_project, src_packages, tgt_project, tgt_releaseproject, opt_sourceupdate, message='', enforce_branching=False, rev=None): import cgi r = Request() if src_packages: for p in src_packages: - r.add_action('maintenance_incident', src_project=src_project, src_package=p, tgt_project=tgt_project, tgt_releaseproject=tgt_releaseproject, opt_sourceupdate = opt_sourceupdate) + r.add_action('maintenance_incident', src_project=src_project, src_package=p, src_rev=rev, tgt_project=tgt_project, tgt_releaseproject=tgt_releaseproject, opt_sourceupdate = opt_sourceupdate) else: r.add_action('maintenance_incident', src_project=src_project, tgt_project=tgt_project, tgt_releaseproject=tgt_releaseproject, opt_sourceupdate = opt_sourceupdate) # XXX: clarify why we need the unicode(...) stuff @@ -4271,7 +4272,7 @@ if project is None: raise oscerr.APIError("Server did not define a default maintenance project, can't submit.") tproject = project.get('name') - r = create_maintenance_request(apiurl, src_project, [src_package], tproject, dst_project, src_update, message) + r = create_maintenance_request(apiurl, src_project, [src_package], tproject, dst_project, src_update, message, rev=orev) r = r.reqid else: raise @@ -4706,18 +4707,6 @@ if target_filename.endswith('.AppImage'): os.chmod(target_filename, 0o755) -def dgst_from_string(str): - # Python 2.5 depracates the md5 modules - # Python 2.4 doesn't have hashlib yet - try: - import hashlib - md5_hash = hashlib.md5() - except ImportError: - import md5 - md5_hash = md5.new() - md5_hash.update(str) - return md5_hash.hexdigest() - def dgst(file): #if not os.path.exists(file): @@ -5146,7 +5135,7 @@ path_args=(quote_plus(dst_project), quote_plus(dst_package)), template_args=None, create_new=False, apiurl=apiurl) - root = ET.fromstring(b''.join(dst_meta)) + root = ET.fromstring(parse_meta_to_string(dst_meta)) if root.get('project') != dst_project: # The source comes from a different project via a project link, we need to create this instance meta_change = True @@ -5241,7 +5230,7 @@ path_args=(quote_plus(dst_project), quote_plus(dst_package)), template_args=None, create_new=False, apiurl=apiurl) - root = ET.fromstring(b''.join(dst_meta)) + root = ET.fromstring(parse_meta_to_string(dst_meta)) if root.get('project') != dst_project: # The source comes from a different project via a project link, we need to create this instance meta_change = True @@ -6959,7 +6948,7 @@ create_new=False) if data and get_user_meta(apiurl, user) != None: - root = ET.fromstring(b''.join(data)) + root = ET.fromstring(parse_meta_to_string(data)) found = False for person in root.getiterator('person'): if person.get('userid') == user and person.get('role') == role: @@ -6992,7 +6981,7 @@ template_args=None, create_new=False) if data and get_user_meta(apiurl, user) != None: - root = ET.fromstring(''.join(data)) + root = ET.fromstring(parse_meta_to_string(data)) found = False for person in root.getiterator('person'): if person.get('userid') == user and person.get('role') == role: @@ -7023,7 +7012,7 @@ group=user.replace('group:', '') user=None if data: - root = ET.fromstring(b''.join(data)) + root = ET.fromstring(parse_meta_to_string(data)) for group_element in root.getiterator('group'): if group_element.get('role') == "bugowner": root.remove(group_element) @@ -7049,7 +7038,7 @@ create_new=False) if data and show_project_meta(apiurl, dprj) != None: - root = ET.fromstring(''.join(data)) + root = ET.fromstring(parse_meta_to_string(data)) if not root.find('devel') != None: ET.SubElement(root, 'devel') elem = root.find('devel') @@ -7540,7 +7529,7 @@ if tmpfile is not None: tmpfile.seek(0) # the read bytes probably have a moderate size so the str won't be too large - footer += '\n\n' + tmpfile.read() + footer += '\n\n' + decode_it(tmpfile.read()) if msg is None: try: msg = edit_message(footer = footer, template=msg_template) @@ -7913,7 +7902,7 @@ if missing_tags: user = conf.get_apiurl_usr(apiurl) data = get_user_data(apiurl, user, *missing_tags) - if data is not None: + if data: for tag in missing_tags: val = data.pop(0) if val != '-': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/credentials.py new/osc-0.168.0/osc/credentials.py --- old/osc-0.167.2/osc/credentials.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/credentials.py 2020-03-04 10:21:17.000000000 +0100 @@ -199,7 +199,10 @@ self._keyring_backend = keyring_backend def name(self): - return self._keyring_backend.name + if hasattr(self._keyring_backend, 'name'): + return self._keyring_backend.name + else: + return self._keyring_backend.__class__.__name__ def description(self): return 'Backend provided by python-keyring' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/fetch.py new/osc-0.168.0/osc/fetch.py --- old/osc-0.167.2/osc/fetch.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/fetch.py 2020-03-04 10:21:17.000000000 +0100 @@ -82,9 +82,9 @@ raise oscerr.APIError('CPIO archive is incomplete ' '(see .errors file)') if package == '_repository': - n = re.sub(b'\.pkg\.tar\..z$', b'.arch', hdr.filename) + n = re.sub(b'\.pkg\.tar\.(zst|.z)$', b'.arch', hdr.filename) if n.startswith(b'container:'): - n = re.sub(b'\.tar\..z$', b'.tar', hdr.filename) + n = re.sub(b'\.tar\.(zst|.z)$', b'.tar', hdr.filename) pac = pkgs[decode_it(n.rsplit(b'.', 1)[0])] pac.canonname = hdr.filename else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/util/helper.py new/osc-0.168.0/osc/util/helper.py --- old/osc-0.167.2/osc/util/helper.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/util/helper.py 2020-03-04 10:21:17.000000000 +0100 @@ -3,6 +3,7 @@ # and distributed under the terms of the GNU General Public Licence, # either version 2, or (at your option) any later version. +from osc import oscerr def cmp_to_key(mycmp): """ Converts a cmp= function into a key= function. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.167.2/osc/util/packagequery.py new/osc-0.168.0/osc/util/packagequery.py --- old/osc-0.167.2/osc/util/packagequery.py 2020-01-07 11:29:52.000000000 +0100 +++ new/osc-0.168.0/osc/util/packagequery.py 2020-03-04 10:21:17.000000000 +0100 @@ -72,7 +72,8 @@ elif magic[:5] == b'<?xml': f.close() return None - elif magic[:5] == b'\375\067zXZ' or magic[:2] == b'\037\213': + # arch tar ball compressed with gz, xz or zst + elif magic[:5] == b'\375\067zXZ' or magic[:2] == b'\037\213' or magic[:4] == b'(\xb5/\xfd': from . import archquery pkgquery = archquery.ArchQuery(f) else: ++++++ osc.dsc ++++++ --- /var/tmp/diff_new_pack.gakT2Z/_old 2020-03-05 23:23:24.577348115 +0100 +++ /var/tmp/diff_new_pack.gakT2Z/_new 2020-03-05 23:23:24.577348115 +0100 @@ -1,8 +1,8 @@ Format: 1.0 Source: osc -Version: 0.167.2 +Version: 0.168.0 Binary: osc Maintainer: Adrian Schroeter <[email protected]> Architecture: any Standards-Version: 3.7.1 -Build-Depends: debhelper (>= 4.0.0), python-dev, python-setuptools +Build-Depends: debhelper (>= 9), dh-python, python3-all, python3-setuptools
