[3.12] Docs: Ensure no warnings are found in the NEWS file before a given line number (GH-119221) (#119266)

This commit is contained in:
Hugo van Kemenade 2024-05-21 10:40:16 -04:00 committed by GitHub
parent 8b6175c261
commit 22bef96237
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 49 additions and 8 deletions

View file

@ -62,7 +62,8 @@ jobs:
python Doc/tools/check-warnings.py \ python Doc/tools/check-warnings.py \
--annotate-diff '${{ env.branch_base }}' '${{ env.branch_pr }}' \ --annotate-diff '${{ env.branch_base }}' '${{ env.branch_pr }}' \
--fail-if-regression \ --fail-if-regression \
--fail-if-improved --fail-if-improved \
--fail-if-new-news-nit
# This build doesn't use problem matchers or check annotations # This build doesn't use problem matchers or check annotations
build_doc_oldest_supported_sphinx: build_doc_oldest_supported_sphinx:

View file

@ -13,6 +13,9 @@ import sys
from pathlib import Path from pathlib import Path
from typing import TextIO from typing import TextIO
# Fail if NEWS nit found before this line number
NEWS_NIT_THRESHOLD = 200
# Exclude these whether they're dirty or clean, # Exclude these whether they're dirty or clean,
# because they trigger a rebuild of dirty files. # because they trigger a rebuild of dirty files.
EXCLUDE_FILES = { EXCLUDE_FILES = {
@ -245,6 +248,32 @@ def fail_if_improved(
return 0 return 0
def fail_if_new_news_nit(warnings: list[str], threshold: int) -> int:
"""
Ensure no warnings are found in the NEWS file before a given line number.
"""
news_nits = (
warning
for warning in warnings
if "/build/NEWS:" in warning
)
# Nits found before the threshold line
new_news_nits = [
nit
for nit in news_nits
if int(nit.split(":")[1]) <= threshold
]
if new_news_nits:
print("\nError: new NEWS nits:\n")
for warning in new_news_nits:
print(warning)
return -1
return 0
def main(argv: list[str] | None = None) -> int: def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument( parser.add_argument(
@ -264,6 +293,14 @@ def main(argv: list[str] | None = None) -> int:
action="store_true", action="store_true",
help="Fail if new files with no nits are found", help="Fail if new files with no nits are found",
) )
parser.add_argument(
"--fail-if-new-news-nit",
metavar="threshold",
type=int,
nargs="?",
const=NEWS_NIT_THRESHOLD,
help="Fail if new NEWS nit found before threshold line number",
)
args = parser.parse_args(argv) args = parser.parse_args(argv)
if args.annotate_diff is not None and len(args.annotate_diff) > 2: if args.annotate_diff is not None and len(args.annotate_diff) > 2:
@ -304,6 +341,9 @@ def main(argv: list[str] | None = None) -> int:
if args.fail_if_improved: if args.fail_if_improved:
exit_code += fail_if_improved(files_with_expected_nits, files_with_nits) exit_code += fail_if_improved(files_with_expected_nits, files_with_nits)
if args.fail_if_new_news_nit:
exit_code += fail_if_new_news_nit(warnings, args.fail_if_new_news_nit)
return exit_code return exit_code

View file

@ -1,3 +1,3 @@
Fixed handling in :meth:`inspect.signature.bind` of keyword arguments having Fixed handling in :meth:`inspect.Signature.bind` of keyword arguments having
the same name as positional-only arguments when a variadic keyword argument the same name as positional-only arguments when a variadic keyword argument
(e.g. ``**kwargs``) is present. (e.g. ``**kwargs``) is present.

View file

@ -1,2 +1,2 @@
Fix TypeError in :func:`email.Message.get_payload` when the charset is :rfc:`2231` Fix TypeError in :func:`email.message.Message.get_payload` when the charset is
encoded. :rfc:`2231` encoded.

View file

@ -5,5 +5,5 @@ to that instance's class to persist in an internal cache in the
class was dynamically created, the class held strong references to other class was dynamically created, the class held strong references to other
objects which took up a significant amount of memory, and the cache objects which took up a significant amount of memory, and the cache
contained the sole strong reference to the class. The fix for the regression contained the sole strong reference to the class. The fix for the regression
leads to a slowdown in :func:`getattr_static`, but the function should still leads to a slowdown in :func:`!getattr_static`, but the function should still
be signficantly faster than it was in Python 3.11. Patch by Alex Waygood. be significantly faster than it was in Python 3.11. Patch by Alex Waygood.

View file

@ -1,2 +1,2 @@
Fix a bug where :func:`sqlite3.iterdump` could fail if a custom :attr:`row Fix a bug where :func:`!sqlite3.iterdump` could fail if a custom :attr:`row
factory <sqlite3.Connection.row_factory>` was used. Patch by Erlend Aasland. factory <sqlite3.Connection.row_factory>` was used. Patch by Erlend Aasland.

View file

@ -1,2 +1,2 @@
Fix an unraisable exception in :meth:`telnetlib.Telnet.__del__` when the Fix an unraisable exception in :meth:`!telnetlib.Telnet.__del__` when the
``__init__()`` method was not called. ``__init__()`` method was not called.