Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ipykernel for openSUSE:Factory checked in at 2022-09-15 22:57:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ipykernel (Old) and /work/SRC/openSUSE:Factory/.python-ipykernel.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ipykernel" Thu Sep 15 22:57:36 2022 rev:27 rq:1003368 version:6.15.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ipykernel/python-ipykernel.changes 2022-09-11 21:57:16.545615663 +0200 +++ /work/SRC/openSUSE:Factory/.python-ipykernel.new.2083/python-ipykernel.changes 2022-09-15 22:57:38.540953151 +0200 @@ -1,0 +2,11 @@ +Tue Sep 13 15:42:50 UTC 2022 - Arun Persaud <a...@gmx.de> + +- update to version 6.15.3: + * Bugs fixed + + PR: Close memory leak #990 (@impact27) + + Handle all possible exceptions when trying to import the + debugger #987 (@JohanMabille) + * Maintenance and upkeep improvements + + Add python logo in svg format #984 (@steff456) + +------------------------------------------------------------------- Old: ---- ipykernel-6.15.2.tar.gz New: ---- ipykernel-6.15.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ipykernel.spec ++++++ --- /var/tmp/diff_new_pack.MuD2FP/_old 2022-09-15 22:57:39.044954574 +0200 +++ /var/tmp/diff_new_pack.MuD2FP/_new 2022-09-15 22:57:39.048954586 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python3-%{**}} %define skip_python2 1 Name: python-ipykernel -Version: 6.15.2 +Version: 6.15.3 Release: 0 Summary: IPython Kernel for Jupyter License: BSD-3-Clause ++++++ ipykernel-6.15.2.tar.gz -> ipykernel-6.15.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/.pre-commit-config.yaml new/ipykernel-6.15.3/.pre-commit-config.yaml --- old/ipykernel-6.15.2/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -17,7 +17,7 @@ - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 22.6.0 + rev: 22.8.0 hooks: - id: black args: ["--line-length", "100"] @@ -60,13 +60,13 @@ stages: [manual] - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.22.0 + rev: v8.23.1 hooks: - id: eslint stages: [manual] - repo: https://github.com/sirosen/check-jsonschema - rev: 0.17.1 + rev: 0.18.2 hooks: - id: check-jsonschema name: "Check GitHub Workflows" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/CHANGELOG.md new/ipykernel-6.15.3/CHANGELOG.md --- old/ipykernel-6.15.2/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/CHANGELOG.md 2020-02-02 01:00:00.000000000 +0100 @@ -2,6 +2,30 @@ <!-- <START NEW CHANGELOG ENTRY> --> +## 6.15.3 + +([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.15.2...861b1242a7601f1608707ed8bbfb6e801914cb4a)) + +### Bugs fixed + +- PR: Close memory leak [#990](https://github.com/ipython/ipykernel/pull/990) ([@impact27](https://github.com/impact27)) +- Handle all possible exceptions when trying to import the debugger [#987](https://github.com/ipython/ipykernel/pull/987) ([@JohanMabille](https://github.com/JohanMabille)) + +### Maintenance and upkeep improvements + +- [pre-commit.ci] pre-commit autoupdate [#989](https://github.com/ipython/ipykernel/pull/989) ([@pre-commit-ci](https://github.com/pre-commit-ci)) +- [pre-commit.ci] pre-commit autoupdate [#985](https://github.com/ipython/ipykernel/pull/985) ([@pre-commit-ci](https://github.com/pre-commit-ci)) +- Add python logo in svg format [#984](https://github.com/ipython/ipykernel/pull/984) ([@steff456](https://github.com/steff456)) +- [pre-commit.ci] pre-commit autoupdate [#982](https://github.com/ipython/ipykernel/pull/982) ([@pre-commit-ci](https://github.com/pre-commit-ci)) + +### Contributors to this release + +([GitHub contributors page for this release](https://github.com/ipython/ipykernel/graphs/contributors?from=2022-08-29&to=2022-09-13&type=c)) + +[@impact27](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Aimpact27+updated%3A2022-08-29..2022-09-13&type=Issues) | [@JohanMabille](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3AJohanMabille+updated%3A2022-08-29..2022-09-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Apre-commit-ci+updated%3A2022-08-29..2022-09-13&type=Issues) | [@steff456](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Asteff456+updated%3A2022-08-29..2022-09-13&type=Issues) + +<!-- <END NEW CHANGELOG ENTRY> --> + ## 6.15.2 ([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.15.1...724753a185b0954f0e662c226b86dc8146c62bcb)) @@ -26,8 +50,6 @@ [@blink1073](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Ablink1073+updated%3A2022-07-08..2022-08-29&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Apre-commit-ci+updated%3A2022-07-08..2022-08-29&type=Issues) | [@rayosborn](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Arayosborn+updated%3A2022-07-08..2022-08-29&type=Issues) | [@rhelmot](https://github.com/search?q=repo%3Aipython%2Fipykernel+involves%3Arhelmot+updated%3A2022-07-08..2022-08-29&type=Issues) -<!-- <END NEW CHANGELOG ENTRY> --> - ## 6.15.1 ([Full Changelog](https://github.com/ipython/ipykernel/compare/v6.15.0...d9a8578ab2864b4ee636b12252e04a9b70047d0b)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/PKG-INFO new/ipykernel-6.15.3/PKG-INFO --- old/ipykernel-6.15.2/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ipykernel -Version: 6.15.2 +Version: 6.15.3 Summary: IPython Kernel for Jupyter Project-URL: Homepage, https://ipython.org Author-email: IPython Development Team <ipython-...@scipy.org> @@ -63,6 +63,7 @@ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. +License-File: COPYING.md Keywords: Interactive,Interpreter,Shell,Web Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Science/Research diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/ipykernel/_version.py new/ipykernel-6.15.3/ipykernel/_version.py --- old/ipykernel-6.15.2/ipykernel/_version.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/ipykernel/_version.py 2020-02-02 01:00:00.000000000 +0100 @@ -5,7 +5,7 @@ from typing import List # Version string must appear intact for tbump versioning -__version__ = "6.15.2" +__version__ = "6.15.3" # Build up version_info tuple for backwards compatibility pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/ipykernel/debugger.py new/ipykernel-6.15.3/ipykernel/debugger.py --- old/ipykernel-6.15.2/ipykernel/debugger.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/ipykernel/debugger.py 2020-02-02 01:00:00.000000000 +0100 @@ -30,6 +30,14 @@ _is_debugpy_available = True except ImportError: _is_debugpy_available = False +except Exception as e: + # We cannot import the module where the DebuggerInitializationError + # is defined + if e.__class__.__name__ == "DebuggerInitializationError": + _is_debugpy_available = False + else: + raise e + # Required for backwards compatiblity ROUTING_ID = getattr(zmq, "ROUTING_ID", None) or zmq.IDENTITY diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/ipykernel/eventloops.py new/ipykernel-6.15.3/ipykernel/eventloops.py --- old/ipykernel-6.15.2/ipykernel/eventloops.py 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/ipykernel/eventloops.py 2020-02-02 01:00:00.000000000 +0100 @@ -21,7 +21,7 @@ return sys.platform == "darwin" and V(platform.mac_ver()[0]) >= V("10.9") -def _notify_stream_qt(kernel, stream): +def _notify_stream_qt(kernel): from IPython.external.qt_for_kernel import QtCore @@ -31,13 +31,17 @@ # due to our consuming of the edge-triggered FD # flush returns the number of events consumed. # if there were any, wake it up - if stream.flush(limit=1): - notifier.setEnabled(False) + if kernel.shell_stream.flush(limit=1): + kernel._qt_notifier.setEnabled(False) kernel.app.quit() - fd = stream.getsockopt(zmq.FD) - notifier = QtCore.QSocketNotifier(fd, QtCore.QSocketNotifier.Read, kernel.app) - notifier.activated.connect(process_stream_events) + if not hasattr(kernel, "_qt_notifier"): + fd = kernel.shell_stream.getsockopt(zmq.FD) + kernel._qt_notifier = QtCore.QSocketNotifier(fd, QtCore.QSocketNotifier.Read, kernel.app) + kernel._qt_notifier.activated.connect(process_stream_events) + else: + kernel._qt_notifier.setEnabled(True) + # there may already be unprocessed events waiting. # these events will not wake zmq's edge-triggered FD # since edge-triggered notification only occurs on new i/o activity. @@ -45,10 +49,11 @@ # so we start in a clean state ensuring that any new i/o events will notify. # schedule first call on the eventloop as soon as it's running, # so we don't block here processing events - timer = QtCore.QTimer(kernel.app) - timer.setSingleShot(True) - timer.timeout.connect(process_stream_events) - timer.start(0) + if not hasattr(kernel, "_qt_timer"): + kernel._qt_timer = QtCore.QTimer(kernel.app) + kernel._qt_timer.setSingleShot(True) + kernel._qt_timer.timeout.connect(process_stream_events) + kernel._qt_timer.start(0) # mapping of keys to loop functions @@ -118,7 +123,7 @@ kernel.app = get_app_qt4([" "]) if isinstance(kernel.app, QtGui.QApplication): kernel.app.setQuitOnLastWindowClosed(False) - _notify_stream_qt(kernel, kernel.shell_stream) + _notify_stream_qt(kernel) _loop_qt(kernel.app) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/ipykernel/resources/logo-svg.svg new/ipykernel-6.15.3/ipykernel/resources/logo-svg.svg --- old/ipykernel-6.15.2/ipykernel/resources/logo-svg.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/ipykernel/resources/logo-svg.svg 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,265 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.0" + id="svg2" + sodipodi:version="0.32" + inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" + sodipodi:docname="python-logo-only.svg" + width="83.371017pt" + height="101.00108pt" + inkscape:export-filename="python-logo-only.png" + inkscape:export-xdpi="232.44" + inkscape:export-ydpi="232.44" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + <metadata + id="metadata371"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="2080" + inkscape:window-width="1976" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + inkscape:zoom="2.1461642" + inkscape:cx="91.558698" + inkscape:cy="47.9926" + inkscape:window-x="1092" + inkscape:window-y="72" + inkscape:current-layer="svg2" + width="210mm" + height="40mm" + units="mm" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="pt" + showgrid="false" + inkscape:window-maximized="0" /> + <defs + id="defs4"> + <linearGradient + id="linearGradient2795"> + <stop + style="stop-color:#b8b8b8;stop-opacity:0.49803922;" + offset="0" + id="stop2797" /> + <stop + style="stop-color:#7f7f7f;stop-opacity:0;" + offset="1" + id="stop2799" /> + </linearGradient> + <linearGradient + id="linearGradient2787"> + <stop + style="stop-color:#7f7f7f;stop-opacity:0.5;" + offset="0" + id="stop2789" /> + <stop + style="stop-color:#7f7f7f;stop-opacity:0;" + offset="1" + id="stop2791" /> + </linearGradient> + <linearGradient + id="linearGradient3676"> + <stop + style="stop-color:#b2b2b2;stop-opacity:0.5;" + offset="0" + id="stop3678" /> + <stop + style="stop-color:#b3b3b3;stop-opacity:0;" + offset="1" + id="stop3680" /> + </linearGradient> + <linearGradient + id="linearGradient3236"> + <stop + style="stop-color:#f4f4f4;stop-opacity:1" + offset="0" + id="stop3244" /> + <stop + style="stop-color:white;stop-opacity:1" + offset="1" + id="stop3240" /> + </linearGradient> + <linearGradient + id="linearGradient4671"> + <stop + style="stop-color:#ffd43b;stop-opacity:1;" + offset="0" + id="stop4673" /> + <stop + style="stop-color:#ffe873;stop-opacity:1" + offset="1" + id="stop4675" /> + </linearGradient> + <linearGradient + id="linearGradient4689"> + <stop + style="stop-color:#5a9fd4;stop-opacity:1;" + offset="0" + id="stop4691" /> + <stop + style="stop-color:#306998;stop-opacity:1;" + offset="1" + id="stop4693" /> + </linearGradient> + <linearGradient + x1="224.23996" + y1="144.75717" + x2="-65.308502" + y2="144.75717" + id="linearGradient2987" + xlink:href="#linearGradient4671" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" /> + <linearGradient + x1="172.94208" + y1="77.475983" + x2="26.670298" + y2="76.313133" + id="linearGradient2990" + xlink:href="#linearGradient4689" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient2587" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" + x1="172.94208" + y1="77.475983" + x2="26.670298" + y2="76.313133" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4671" + id="linearGradient2589" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" + x1="224.23996" + y1="144.75717" + x2="-65.308502" + y2="144.75717" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient2248" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" + x1="172.94208" + y1="77.475983" + x2="26.670298" + y2="76.313133" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4671" + id="linearGradient2250" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(100.2702,99.61116)" + x1="224.23996" + y1="144.75717" + x2="-65.308502" + y2="144.75717" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4671" + id="linearGradient2255" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)" + x1="224.23996" + y1="144.75717" + x2="-65.308502" + y2="144.75717" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient2258" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)" + x1="172.94208" + y1="76.176224" + x2="26.670298" + y2="76.313133" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2795" + id="radialGradient2801" + cx="61.518883" + cy="132.28575" + fx="61.518883" + fy="132.28575" + r="29.036913" + gradientTransform="matrix(1,0,0,0.177966,0,108.7434)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4671" + id="linearGradient1475" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)" + x1="150.96111" + y1="192.35176" + x2="112.03144" + y2="137.27299" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient1478" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)" + x1="26.648937" + y1="20.603781" + x2="135.66525" + y2="114.39767" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2795" + id="radialGradient1480" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.7490565e-8,-0.23994696,1.054668,3.7915457e-7,-83.7008,142.46201)" + cx="61.518883" + cy="132.28575" + fx="61.518883" + fy="132.28575" + r="29.036913" /> + </defs> + <path + style="fill:url(#linearGradient1478);fill-opacity:1" + d="M 54.918785,9.1927421e-4 C 50.335132,0.02221727 45.957846,0.41313697 42.106285,1.0946693 30.760069,3.0991731 28.700036,7.2947714 28.700035,15.032169 v 10.21875 h 26.8125 v 3.40625 h -26.8125 -10.0625 c -7.792459,0 -14.6157588,4.683717 -16.7499998,13.59375 -2.46181998,10.212966 -2.57101508,16.586023 0,27.25 1.9059283,7.937852 6.4575432,13.593748 14.2499998,13.59375 h 9.21875 v -12.25 c 0,-8.849902 7.657144,-16.656248 16.75,-16.65625 h 26.78125 c 7.454951,0 13.406253,-6.138164 13.40625,-13.625 v -25.53125 c 0,-7.2663386 -6.12998,-12.7247771 -13.40625,-13.9374997 C 64.281548,0.32794397 59.502438,-0.02037903 54.918785,9.1927421e-4 Z m -14.5,8.21875012579 c 2.769547,0 5.03125,2.2986456 5.03125,5.1249996 -2e-6,2.816336 -2.261703,5.09375 -5.03125,5.09375 -2.779476,-1e-6 -5.03125,-2.277415 -5.03125,-5.09375 -10e-7,-2.826353 2.251774,-5.1249996 5.03125,-5.1249996 z" + id="path1948" /> + <path + style="fill:url(#linearGradient1475);fill-opacity:1" + d="m 85.637535,28.657169 v 11.90625 c 0,9.230755 -7.825895,16.999999 -16.75,17 h -26.78125 c -7.335833,0 -13.406249,6.278483 -13.40625,13.625 v 25.531247 c 0,7.266344 6.318588,11.540324 13.40625,13.625004 8.487331,2.49561 16.626237,2.94663 26.78125,0 6.750155,-1.95439 13.406253,-5.88761 13.40625,-13.625004 V 86.500919 h -26.78125 v -3.40625 h 26.78125 13.406254 c 7.792461,0 10.696251,-5.435408 13.406241,-13.59375 2.79933,-8.398886 2.68022,-16.475776 0,-27.25 -1.92578,-7.757441 -5.60387,-13.59375 -13.406241,-13.59375 z m -15.0625,64.65625 c 2.779478,3e-6 5.03125,2.277417 5.03125,5.093747 -2e-6,2.826354 -2.251775,5.125004 -5.03125,5.125004 -2.76955,0 -5.03125,-2.29865 -5.03125,-5.125004 2e-6,-2.81633 2.261697,-5.093747 5.03125,-5.093747 z" + id="path1950" /> + <ellipse + style="opacity:0.44382;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15.4174;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path1894" + cx="55.816761" + cy="127.70079" + rx="35.930977" + ry="6.9673119" /> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipykernel-6.15.2/pyproject.toml new/ipykernel-6.15.3/pyproject.toml --- old/ipykernel-6.15.2/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 +++ new/ipykernel-6.15.3/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 @@ -4,7 +4,7 @@ [project] name = "ipykernel" -version = "6.15.2" +version = "6.15.3" authors = [{name = "IPython Development Team", email = "ipython-...@scipy.org"}] license = {file = "COPYING.md"} readme = "README.md" @@ -61,7 +61,7 @@ skip = ["check-links"] [tool.tbump.version] -current = "6.15.2" +current = "6.15.3" regex = ''' (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+) ((?P<channel>a|b|rc|.dev)(?P<release>\d+))?