Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-Markdown for openSUSE:Factory checked in at 2025-06-27 23:00:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Markdown (Old) and /work/SRC/openSUSE:Factory/.python-Markdown.new.7067 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Markdown" Fri Jun 27 23:00:19 2025 rev:52 rq:1288743 version:3.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Markdown/python-Markdown.changes 2025-06-20 16:48:43.446560807 +0200 +++ /work/SRC/openSUSE:Factory/.python-Markdown.new.7067/python-Markdown.changes 2025-06-27 23:00:49.804080725 +0200 @@ -1,0 +2,9 @@ +Thu Jun 19 19:01:44 UTC 2025 - BenoƮt Monin <benoit.mo...@gmx.fr> + +- update to version 3.8.2: + * Fix codecs deprecation in Python 3.14. + * Fix issue with unclosed comment parsing in Python 3.14. + * Fix issue with unclosed declarations in Python 3.14. + * Fix issue with unclosed HTML tag <foo and Python 3.14. + +------------------------------------------------------------------- Old: ---- markdown-3.8.1.tar.gz New: ---- markdown-3.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Markdown.spec ++++++ --- /var/tmp/diff_new_pack.xDdp2J/_old 2025-06-27 23:00:51.632156066 +0200 +++ /var/tmp/diff_new_pack.xDdp2J/_new 2025-06-27 23:00:51.636156231 +0200 @@ -27,7 +27,7 @@ %bcond_with test %endif Name: python-Markdown%{psuffix} -Version: 3.8.1 +Version: 3.8.2 Release: 0 Summary: Python implementation of Markdown License: BSD-3-Clause ++++++ markdown-3.8.1.tar.gz -> markdown-3.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/Markdown.egg-info/PKG-INFO new/markdown-3.8.2/Markdown.egg-info/PKG-INFO --- old/markdown-3.8.1/Markdown.egg-info/PKG-INFO 2025-06-18 16:50:31.000000000 +0200 +++ new/markdown-3.8.2/Markdown.egg-info/PKG-INFO 2025-06-19 19:12:34.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: Markdown -Version: 3.8.1 +Version: 3.8.2 Summary: Python implementation of John Gruber's Markdown. Author: Manfred Stienstra, Yuri Takhteyev Author-email: Waylan limberg <python.markd...@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/PKG-INFO new/markdown-3.8.2/PKG-INFO --- old/markdown-3.8.1/PKG-INFO 2025-06-18 16:50:31.789539000 +0200 +++ new/markdown-3.8.2/PKG-INFO 2025-06-19 19:12:34.962509200 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: Markdown -Version: 3.8.1 +Version: 3.8.2 Summary: Python implementation of John Gruber's Markdown. Author: Manfred Stienstra, Yuri Takhteyev Author-email: Waylan limberg <python.markd...@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/docs/changelog.md new/markdown-3.8.2/docs/changelog.md --- old/markdown-3.8.1/docs/changelog.md 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/docs/changelog.md 2025-06-19 19:12:28.000000000 +0200 @@ -6,9 +6,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +and this project adheres to the +[Python Version Specification]: https://packaging.python.org/en/latest/specifications/version-specifiers/. See the [Contributing Guide](contributing.md) for details. +## [3.8.2] - 2025-06-19 + +### Fixed + +* Fix `codecs` deprecation in Python 3.14. +* Fix issue with unclosed comment parsing in Python 3.14. +* Fix issue with unclosed declarations in Python 3.14. +* Fix issue with unclosed HTML tag `<foo` and Python 3.14. + ## [3.8.1] - 2025-06-18 ### Fixed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/docs/contributing.md new/markdown-3.8.2/docs/contributing.md --- old/markdown-3.8.1/docs/contributing.md 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/docs/contributing.md 2025-06-19 19:12:28.000000000 +0200 @@ -23,7 +23,7 @@ * Branch `master` should generally be stable and release-ready at all times. * Version branches should be used for bug-fixes back-ported to the most recent - PATCH release. + MICRO release. * No other branches should be created. Any other branches which exist are preserved for historical reasons only. @@ -256,8 +256,8 @@ maintainers. The current changelog should only document the changes for one MAJOR release and -its various MINOR and PATCH releases (see [Versions](#versions) for an -explanation of MAJOR, MINOR, and PATCH releases). Older versions from previous +its various MINOR and MICRO releases (see [Versions](#versions) for an +explanation of MAJOR, MINOR, and MICRO releases). Older versions from previous series of releases can be found in the archive at `docs/change_log/` and may follow a different format. Note that the archived changelogs are not in the site navigation and are only linked from the [Previous @@ -416,22 +416,23 @@ ## Versions -Python-Markdown follows [Semantic Versioning] and uses the -`MAJOR.MINOR.PATCH[.dev#|a#|b#|rc#]` format for identifying releases. The status -of the `master` branch should always be identified in the `__version_info__` -tuple defined in [`markdown/__meta__.py`][markdown/__meta__.py]. The contents of -that tuple will automatically be converted into a normalized version which -conforms to [PEP 440]. Each time the version is changed, the continuous -integration server will run a test to ensure that the current version is in a -valid normalized format. +Python-Markdown follows the [Python Version Specification] (originally defined +in [PEP 440]) and uses the `MAJOR.MINOR.MICRO[.dev#|a#|b#|rc#]` format for +identifying releases. The status of the `master` branch should always be +identified in the `__version_info__` tuple defined in[`markdown/__meta__.py`] +[markdown/__meta__.py]. The contents of that tuple will automatically be +converted into a normalized version string which conforms to the +[Python Version Specification]. Each time the version is changed, the +continuous integration server will run a test to ensure that the current +version is in a valid normalized format. ### Version Status A MAJOR version is in development status when the MINOR version is `0`, the -PATCH version is `0`, and the version includes a `dev` segment. +MICRO version is `0`, and the version includes a `dev` segment. A MINOR version is in development status when the MINOR version is not `0`, the -PATCH version is `0`, and the version includes a `dev` segment. +MICRO version is `0`, and the version includes a `dev` segment. At all other times, the code is considered stable and release-ready. @@ -446,7 +447,7 @@ New features and backward incompatible changes may only be merged to the `master` branch when the MAJOR and/or MINOR version is in development status -pursuant to [Semantic Versioning]. +pursuant to the [Python Version Specification]. A separate commit to the `master` branch should be made to bump up the MAJOR and/or MINOR version and set development status. Only then will any pull @@ -459,7 +460,7 @@ be named with the most recently released MINOR version. For example, if the `master` branch is at `3.1.dev0` and the most recent MINOR release was `3.0.4`, then the version branch would be named `3.0` and any releases from that branch -would increment the PATCH version only (`3.0.5`, `3.0.6`...). +would increment the MICRO version only (`3.0.5`, `3.0.6`...). ## Release Process @@ -474,24 +475,37 @@ 3. Update the version defined in [`markdown/__meta__.py`][markdown/__meta__.py]. -4. Build a local copy of the documentation, browse through the pages and +4. Build a local copy of the documentation and browse through the pages to confirm that no obvious issues exist with the documentation. -5. Create a pull request with a commit message in the following format: +5. Create a pull request labeled `release`{ .label .release } with a commit + message in the following format: Bump version to X.X.X + !!! note + + For the checks to run properly the `release`{ .label .release } label + must be set on GitHub before creating the pull request. If the label + is added to the pull request later, additional changes will need to + be pushed to the pull request for the checks to acknowledge the + label.The relevant check verifies that the version defined in the + code matches the latest version in the changelog and that the + changelog no longer lists an `unreleased` entry. This check is + necessary to ensure deployment will not fail later. + 6. After all checks have passed, merge the pull request. -7. Create a git tag with the new version as the tag name and push to the - [Python-Markdown/markdown] repository. The new tag should trigger a GitHub - workflow which will automatically deploy the release to PyPI and update the - documentation. +7. Create a git tag with the new version as the tag name (in the format X.X.X + with no prefixes or suffixes) and push to the [Python-Markdown/markdown] + repository. The new tag should trigger a GitHub workflow which will + automatically deploy the release to PyPI and update the documentation. In the event that the deployment fails, the following steps can be taken to deploy manually: - - Deploy the release to [PyPI] with the command `make deploy`. + - Deploy the release to [PyPI] with the command `make deploy` (a valid + authentication token will need to be provided). - Deploy an update to the documentation using [MkDocs]. The following example assumes that local clones of the [Python-Markdown/markdown] and @@ -504,7 +518,7 @@ ## Issue and Pull Request Labels -Below are the labels used to track and manages issues and pull requests. The +Below are the labels used to track and manage issues and pull requests. The labels are loosely grouped by their purpose, but it is not necessary for every issue to have a label from every group, and an issue may have more than one label from the same group. @@ -551,6 +565,10 @@ | `approved`{ .label .approved } | The pull request is ready to be merged. | | `rejected`{ .label .rejected } | The pull request is rejected for the stated reasons. | +One additional label exists named `release`{ .label .release }. This label should only be +assigned to pull requests which bump the version. See the [Release Process](#release-process) +for details. + [Python-Markdown Organization]: https://github.com/Python-Markdown [Python-Markdown Code of Conduct]: https://github.com/Python-Markdown/markdown/blob/master/CODE_OF_CONDUCT.md [Python-Markdown/markdown]: https://github.com/Python-Markdown/markdown @@ -582,8 +600,8 @@ [tox]: https://tox.readthedocs.io/en/latest/ [aspell]: http://aspell.net/ [test tools]: test_tools.md -[Semantic Versioning]: https://semver.org/spec/v2.0.0.html -[markdown/__meta__.py]: https://github.com/Python-Markdown/markdown/blob/master/markdown/__meta__.py#L29 +[Python Version Specification]: https://packaging.python.org/en/latest/specifications/version-specifiers/ +[markdown/__meta__.py]: https://github.com/Python-Markdown/markdown/blob/master/markdown/__meta__.py#L31 [PEP 440]: https://www.python.org/dev/peps/pep-0440/ [PyPI]: https://pypi.org/project/Markdown/ [Python-Markdown/Python-Markdown.github.io]: https://github.com/Python-Markdown/Python-Markdown.github.io @@ -596,41 +614,46 @@ font-weight: 600; line-height: 15px; display: inline-block; - padding: 4px 6px; + padding: 0 8px; + margin: 4px 0; + border-radius: 999px; } code.bug { - background-color: #c45b46; + background-color: #c45b46 !important; } code.feature { - background-color: #7b17d8; + background-color: #7b17d8 !important; color: #ffffff; } code.support { - background-color: #efbe62; + background-color: #efbe62 !important; } code.process { - background-color: #eec9ff; + background-color: #eec9ff !important; } code.core { - background-color: #0b02e1; + background-color: #0b02e1 !important; color: #ffffff; } code.extension { - background-color: #709ad8; + background-color: #709ad8 !important; } code.docs { - background-color: #b2ffeb; + background-color: #b2ffeb !important; } code.approved { - background-color: #beed6d; + background-color: #beed6d !important; } code.low { - background-color: #dddddd; + background-color: #dddddd !important; } code.pending { - background-color: #f0f49a; + background-color: #f0f49a !important; } code.rejected { - background-color: #f7c7be; + background-color: #f7c7be !important; + } + code.release { + background-color: #d4c5f9 !important; } </style> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/markdown/__main__.py new/markdown-3.8.2/markdown/__main__.py --- old/markdown-3.8.1/markdown/__main__.py 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/markdown/__main__.py 2025-06-19 19:12:28.000000000 +0200 @@ -21,7 +21,6 @@ import sys import optparse -import codecs import warnings import markdown try: @@ -100,7 +99,7 @@ extension_configs = {} if options.configfile: - with codecs.open( + with open( options.configfile, mode="r", encoding=options.encoding ) as fp: try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/markdown/__meta__.py new/markdown-3.8.2/markdown/__meta__.py --- old/markdown-3.8.1/markdown/__meta__.py 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/markdown/__meta__.py 2025-06-19 19:12:28.000000000 +0200 @@ -28,7 +28,7 @@ from __future__ import annotations -__version_info__ = (3, 8, 1, 'final', 0) +__version_info__ = (3, 8, 2, 'final', 0) def _get_version(version_info): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/markdown/core.py new/markdown-3.8.2/markdown/core.py --- old/markdown-3.8.1/markdown/core.py 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/markdown/core.py 2025-06-19 19:12:28.000000000 +0200 @@ -417,7 +417,7 @@ # Read the source if input: if isinstance(input, str): - input_file = codecs.open(input, mode="r", encoding=encoding) + input_file = open(input, mode="r", encoding=encoding) else: input_file = codecs.getreader(encoding)(input) text = input_file.read() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/markdown/extensions/md_in_html.py new/markdown-3.8.2/markdown/extensions/md_in_html.py --- old/markdown-3.8.1/markdown/extensions/md_in_html.py 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/markdown/extensions/md_in_html.py 2025-06-19 19:12:28.000000000 +0200 @@ -283,7 +283,11 @@ if self.rawdata[i:i+3] == '<![' and not self.rawdata[i:i+9] == '<![CDATA[': # We have encountered the bug in #1534 (Python bug `gh-77057`). # Provide an override until we drop support for Python < 3.13. - return self.parse_bogus_comment(i) + result = self.parse_bogus_comment(i) + if result == -1: + self.handle_data(self.rawdata[i:i + 1]) + return i + 1 + return result # The same override exists in `HTMLExtractor` without the check # for `mdstack`. Therefore, use parent of `HTMLExtractor` instead. return super(HTMLExtractor, self).parse_html_declaration(i) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/markdown/htmlparser.py new/markdown-3.8.2/markdown/htmlparser.py --- old/markdown-3.8.1/markdown/htmlparser.py 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/markdown/htmlparser.py 2025-06-19 19:12:28.000000000 +0200 @@ -93,6 +93,8 @@ self.lineno_start_cache = [0] + self.override_comment_update = False + # This calls self.reset super().__init__(*args, **kwargs) self.md = md @@ -253,8 +255,21 @@ self.handle_empty_tag('&{};'.format(name), is_block=False) def handle_comment(self, data: str): + # Check if the comment is unclosed, if so, we need to override position + i = self.line_offset + self.offset + len(data) + 4 + if self.rawdata[i:i + 3] != '-->': + self.handle_data('<') + self.override_comment_update = True + return self.handle_empty_tag('<!--{}-->'.format(data), is_block=True) + def updatepos(self, i: int, j: int) -> int: + if self.override_comment_update: + self.override_comment_update = False + i = 0 + j = 1 + return super().updatepos(i, j) + def handle_decl(self, data: str): self.handle_empty_tag('<!{}>'.format(data), is_block=True) @@ -278,7 +293,11 @@ if self.rawdata[i:i+3] == '<![' and not self.rawdata[i:i+9] == '<![CDATA[': # We have encountered the bug in #1534 (Python bug `gh-77057`). # Provide an override until we drop support for Python < 3.13. - return self.parse_bogus_comment(i) + result = self.parse_bogus_comment(i) + if result == -1: + self.handle_data(self.rawdata[i:i + 1]) + return i + 1 + return result return super().parse_html_declaration(i) # This is not the beginning of a raw block so treat as plain data # and avoid consuming any tags which may follow (see #1066). @@ -313,7 +332,8 @@ self.__starttag_text = None endpos = self.check_for_whole_start_tag(i) if endpos < 0: - return endpos + self.handle_data(self.rawdata[i:i + 1]) + return i + 1 rawdata = self.rawdata self.__starttag_text = rawdata[i:endpos] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown-3.8.1/tox.ini new/markdown-3.8.2/tox.ini --- old/markdown-3.8.1/tox.ini 2025-06-18 16:50:27.000000000 +0200 +++ new/markdown-3.8.2/tox.ini 2025-06-19 19:12:28.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -envlist = py{39, 310, 311, 312, 313}, pypy{39, 310}, pygments, flake8, checkspelling, pep517check, checklinks +envlist = py{39, 310, 311, 312, 313, py314}, pypy{39, 310}, pygments, flake8, checkspelling, pep517check, checklinks isolated_build = True [testenv]