Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
1697 commits
Select commit Hold shift + click to select a range
3b31f8c
[3.13] gh-127356: Fix prepend doctrees directory for gettext target (…
miss-islington Dec 1, 2024
dd2ad70
[3.13] gh-127321: Avoid stopping at an opcode without an associated l…
gaogaotiantian Dec 1, 2024
585d48f
[3.13] gh-127443: Fix some entries in `Doc/data/refcounts.dat` (GH-12…
miss-islington Dec 2, 2024
943e57e
[3.13] Fix Unicode encode_wstr_utf8() (#127420) (#127505)
picnixz Dec 2, 2024
4bafce0
[3.13] gh-126618: fix repr(itertools.count(sys.maxsize)) (GH-127048) …
miss-islington Dec 2, 2024
26f1e88
[3.13] gh-101100: Fix Sphinx warnings about list methods (GH-127054) …
miss-islington Dec 2, 2024
d9ac6b3
[3.13] gh-125703: Correctly honour tracemalloc hooks on specialized D…
miss-islington Dec 2, 2024
b105157
[3.13] gh-124984: Enhance `ssl` thread safety (GH-124993) (#125780)
ZeroIntensity Dec 2, 2024
fd48d98
[3.13] gh-125666: Avoid PyREPL exiting when a null byte is in input (…
miss-islington Dec 2, 2024
23ab1f9
[3.13] gh-99880: document rounding mode for new-style formatting (GH-…
miss-islington Dec 2, 2024
d9bbb52
[3.13] gh-122838: Document missing opcodes (GH-123073) (#126492)
miss-islington Dec 2, 2024
a5672be
[3.13] gh-126699: allow AsyncIterator to be used as a base for Protoc…
miss-islington Dec 2, 2024
2d458b1
[3.13] gh-126720: Docs: Miscellaneous corrections to simple statement…
willingc Dec 2, 2024
511c588
[3.13] add missing gc_collect() calls in sqlite3 tests (GH-127446) (#…
miss-islington Dec 2, 2024
f41d8d8
[3.13] gh-113841: fix possible undefined division by 0 in _Py_c_pow()…
miss-islington Dec 2, 2024
cab2ef5
[3.13] gh-126890: Restore stripped `ssl` docstrings (GH-127281) (#127…
ZeroIntensity Dec 2, 2024
059114c
[3.13] gh-126876: Fix socket internal_select() for large timeout (GH-…
miss-islington Dec 2, 2024
219b826
[3.13] gh-126914: Store the Preallocated Thread State's Pointer in a …
ericsnowcurrently Dec 2, 2024
a853610
gh-119826: Improved fallback for ntpath.abspath() on Windows (GH-119938)
miss-islington Dec 2, 2024
e546876
[3.13] gh-127521: Mark list as "shared" before resizing if necessary …
miss-islington Dec 3, 2024
3479a71
[3.13] gh-127253: Note that Stable ABI is about ABI stability (GH-127…
miss-islington Dec 3, 2024
a63e06d
[3.13] gh-122792: Make IPv4-mapped IPv6 address properties consistent…
miss-islington Dec 3, 2024
ae3f347
[3.13] gh-123935: Fix typo in `_get_slots` in `dataclasses.py` (GH-12…
miss-islington Dec 3, 2024
dddea7c
[3.13] gh-122907: Fix Builds Without HAVE_DYNAMIC_LOADING Set (gh-122…
miss-islington Dec 3, 2024
0671451
Python 3.13.1
Yhg1s Dec 3, 2024
0b266aa
[3.13] gh-127421: Fix race in test_start_new_thread_failed (GH-127549…
miss-islington Dec 3, 2024
fd81351
Post 3.13.1
Yhg1s Dec 3, 2024
b90161f
Merge branch '3.13' of https://github.com/python/cpython into 3.13
Yhg1s Dec 3, 2024
bb46b74
[3.13] Itertool recipe additions (gh-127483) (gh-127585)
miss-islington Dec 4, 2024
a1c52d1
[3.13] gh-127347: Document `traceback.print_list` (GH-127348) (#127569)
miss-islington Dec 4, 2024
4060ef3
[3.13] gh-127536: Add missing locks in listobject.c (GH-127580) (GH-1…
colesbury Dec 4, 2024
1182c64
[3.13] gh-127434: Fix iOS `xcrun --sdk` clang/ar scripts to allow arg…
freakboy3742 Dec 5, 2024
3e11b5c
[3.13] gh-93312: Include <sys/pidfd.h> to get PIDFD_NONBLOCK (GH-1275…
miss-islington Dec 5, 2024
468e8da
[3.13] gh-122431: Disallow negative values in `readline.append_histor…
miss-islington Dec 5, 2024
2da829b
[3.13] GH-126727: Fix test_era_nl_langinfo with Japanese ERAs on Sola…
miss-islington Dec 5, 2024
304111e
[3.13] [Docs] GDB howto: Fix block type of a cast example (GH-127621)…
miss-islington Dec 5, 2024
69bb1c6
[3.13] gh-127582: Make object resurrection thread-safe for free threa…
colesbury Dec 5, 2024
71e8429
[3.13] gh-127655: Ensure `_SelectorSocketTransport.writelines` pauses…
miss-islington Dec 6, 2024
5d35d27
[3.13] gh-101100: amend references starting with `!~` in gh-127054 (G…
miss-islington Dec 6, 2024
8d50e03
[3.13] gh-125610: Fix `STORE_ATTR_INSTANCE_VALUE` specialization chec…
miss-islington Dec 6, 2024
652a0eb
[3.13] gh-127552: Remove comment questioning 4-digit restriction for …
miss-islington Dec 6, 2024
d95df6a
[3.13] Fix typo in `Lib/_android_support.py` (GH-127699) (#127703)
miss-islington Dec 6, 2024
2ba5190
[3.13] Give `poplib.POP3.rpop` a proper docstring (GH-127370) (#127721)
miss-islington Dec 7, 2024
b56100c
[3.13] gh-127734: improve signature of `urllib.request.HTTPPasswordMg…
miss-islington Dec 8, 2024
075c41d
[3.13] gh-126925: Modify how iOS test results are gathered (GH-127592…
freakboy3742 Dec 9, 2024
310efda
gh-127732: Add Windows Server 2025 detection to platform module (GH-1…
miss-islington Dec 9, 2024
6441d42
[3.13] gh-127651: Use __file__ in diagnostics if origin is missing (#…
hauntsaninja Dec 10, 2024
9d0252f
[3.13] gh-126775: make linecache.checkcache threadsafe and GC re-entr…
miss-islington Dec 10, 2024
00d6062
[3.13] gh-101100: Fix sphinx warnings in `whatsnew/3.0.rst` (GH-12766…
miss-islington Dec 10, 2024
8bf5b89
[3.13] gh-127637: add tests for `dis` command-line interface (#127759…
picnixz Dec 10, 2024
990ea33
[3.13] Add zizmor to pre-commit and fix most findings (#127749) (#127…
hugovk Dec 10, 2024
c6c9ff5
[3.13] Docs: Fix indents in `xmlrpc.client.rst` (GH-127782) (#127799)
miss-islington Dec 10, 2024
8b28ded
[3.13] gh-126821: Add versionadded annotation to use_system_logger fe…
miss-islington Dec 10, 2024
acf05aa
[3.13] gh-127563: use `dk_log2_index_bytes=3` in empty dicts (GH-1275…
miss-islington Dec 11, 2024
78dfc28
[3.13] Add `extern "C"` around `PyTraceMalloc_` functions. (GH-127772…
miss-islington Dec 11, 2024
eb692d9
[3.13] gh-126076: Account for relocated objects in tracemalloc (GH-12…
pablogsal Dec 11, 2024
bcdd10d
[3.13] gh-127791: Fix, document, and test `PyUnstable_AtExit` (GH-127…
ZeroIntensity Dec 11, 2024
a94e20e
[3.13] gh-123401: Fix http.cookies module to support obsolete RFC 850…
miss-islington Dec 11, 2024
f56da92
[3.13] CI: Use bash to properly expand variable (GH-127822) (#127824)
miss-islington Dec 11, 2024
8b24d04
[3.13] gh-118915: C API: Document frame locals proxies. (GH-127720) (…
miss-islington Dec 11, 2024
2a78663
[3.13] gh-127257: ssl: Raise OSError for ERR_LIB_SYS (GH-127361) (GH-…
miss-islington Dec 12, 2024
d51c144
[3.13] gh-126937: ctypes: add test for maximum size of a struct field…
encukou Dec 12, 2024
f21b38c
[3.13] gh-127865: Fix build failure for systems without thread local …
miss-islington Dec 12, 2024
d68c941
[3.13] Fix typos in `Lib/_pydecimal.py` (GH-127700) (#127887)
miss-islington Dec 12, 2024
d3d478e
[3.13] Fix typo in traceback docs (GH-127884) (#127890)
miss-islington Dec 12, 2024
740e9ab
[3.13] gh-127845: Minor improvements to iOS test runner script (GH-12…
miss-islington Dec 12, 2024
6023b3b
[3.13] Document PyObject_SelfIter (GH-127861) (#127898)
miss-islington Dec 13, 2024
8384279
[3.13] link to the correct output method in documentation (GH-127857)…
miss-islington Dec 13, 2024
b620e50
[3.13] gh-127906: Backport test_cppext changes from the main branch (…
vstinner Dec 13, 2024
0f38b89
[3.13] gh-127870: Detect recursive calls in ctypes _as_parameter_ han…
miss-islington Dec 13, 2024
78095c9
[3.13] gh-127906: Test the limited C API in test_cppext (GH-127916) (…
miss-islington Dec 13, 2024
2996a2b
[3.13] gh-127906: Backport test_cext changes from the main branch (#1…
vstinner Dec 13, 2024
9c6bd27
[3.13] gh-127852: add remark about ',' separator (GH-127854) (#127941)
miss-islington Dec 14, 2024
90ae4b6
[3.13] gh-127353: Allow to force color output on Windows V2 (GH-12792…
miss-islington Dec 15, 2024
89f4b23
[3.13] Clarify ast docs to use a less confusing example for `ast.Para…
miss-islington Dec 15, 2024
8e143b2
[3.13] gh-127906: Fix Py_BUILD_ASSERT_EXPR() on Windows (#127994)
vstinner Dec 16, 2024
231c939
[3.13] Fix typo in itertools docs (gh-127995) (gh-127996)
miss-islington Dec 16, 2024
28e684b
[3.13] Simplify and speed-up an itertools recipe (gh-127848) (gh-127998)
miss-islington Dec 16, 2024
71a1e79
[3.13] Minor readability improvements for the itertools recipes (gh-1…
miss-islington Dec 16, 2024
367ea89
[3.13] Free arena on _PyCompile_AstOptimize failure in Py_CompileStri…
miss-islington Dec 16, 2024
fe08cdf
[3.13] gh-126742: Add _PyErr_SetLocaleString, use it for gdbm & dlerr…
miss-islington Dec 17, 2024
f8b4e20
[3.13] gh-127060: Disable traceback colors in IDLE (GH-128028) (#128052)
miss-islington Dec 18, 2024
2ff3e95
[3.13] gh-126742: Avoid checking for library filename in test_ctypes …
miss-islington Dec 18, 2024
f8e7b5c
[3.13] gh-122706: fix docs for asyncio ssl sockets (GH-128092) (#128094)
miss-islington Dec 19, 2024
d699ce3
[3.13] gh-126742: add NEWS entry for fix of localized error messages …
miss-islington Dec 19, 2024
08f9b7c
[3.13] gh-128069: brew link --overwrite tcl-tk@8 to prevent conflict …
miss-islington Dec 19, 2024
a0f1f12
[3.13] gh-128062: Fix the font size and shortcut display of the turtl…
miss-islington Dec 19, 2024
3a8bdaf
[3.13] gh-128083: Fix macro redefinition warning in clinic. (GH-12795…
ZeroIntensity Dec 19, 2024
f320f74
[3.13] gh-128030: Avoid error from PyModule_GetFilenameObject for non…
miss-islington Dec 20, 2024
43586a4
[3.13] gh-128116: Skip test_socket VSOCK testStream() on PermissionEr…
miss-islington Dec 20, 2024
09d15aa
[3.13] gh-128049: Fix type confusion bug with the return value of a c…
miss-islington Dec 20, 2024
6f3c2c8
[3.13] gh-126180: Remove getopt and optparse deprecation notices (GH-…
miss-islington Dec 23, 2024
40c46f0
gh-128217: Validate the normalized_environment variable instead of th…
miss-islington Dec 24, 2024
e1a0c40
[3.13] gh-127847: Fix position in the special-cased zipfile seek (GH-…
miss-islington Dec 24, 2024
a52d663
[3.13] gh-128227: Regenerate `Doc/requirements-oldest-sphinx.txt` (GH…
miss-islington Dec 24, 2024
875e49f
[3.13] gh-112328: Make EnumDict usable on its own and document it (GH…
ethanfurman Dec 24, 2024
32adae1
[3.13] gh-126664: revert: Use `else` instead of `finally` in docs exp…
miss-islington Dec 24, 2024
c30cad0
[3.13] gh-128198: Add missing error checks for usages of PyIter_Next(…
serhiy-storchaka Dec 26, 2024
4f59f1d
[3.13] Clean up redundant ifdef in list getitem (GH-128257) (#128276)
miss-islington Dec 26, 2024
1781525
[3.13] gh-127537: Add __class_getitem__ to the python implementation …
miss-islington Dec 27, 2024
bad6b7b
[3.13] gh-125887: Update PyObject_HasAttr exception behavior (GH-1259…
miss-islington Dec 27, 2024
aea2e03
[3.13] Mention loop_factory argument in docstring for asyncio.run() (…
miss-islington Dec 27, 2024
16fde76
[3.13] gh-127586: multiprocessing.Pool does not properly restore bloc…
miss-islington Dec 29, 2024
207a81a
[3.13] gh-128317: Document `calendar.TextCalendar.formatweek` (GH-128…
miss-islington Dec 30, 2024
5a892cb
[3.13] gh-128321: Set LIBS instead of LDFLAGS when checking sqlite3 r…
miss-islington Dec 30, 2024
62729d7
[3.13] gh-128342: Specify timeout unit in subprocess docstrings (GH-1…
miss-islington Dec 30, 2024
08ae06f
[3.13] gh-88834: Unify the instance check for typing.Union and types.…
miss-islington Dec 31, 2024
675b039
[3.13] Reword `about.rst` to not limit Sphinx (GH-128325) (#128382)
miss-islington Dec 31, 2024
48d50fd
[3.13] gh-128349: Use `.. data::` instead of `.. class::` for pre-def…
miss-islington Jan 2, 2025
261a604
[3.13] gh-123925: Fix building curses on platforms without libncurses…
miss-islington Jan 2, 2025
cc5b03f
[3.13] Revert "Doc: Show object descriptions in the table of contents…
miss-islington Jan 2, 2025
24cddab
[3.13] gh-128014: Fix passing default='' to the tkinter method wm_ic…
miss-islington Jan 2, 2025
fa6c48e
[3.13] gh-128013: fix data race in PyUnicode_AsUTF8AndSize on free-th…
kumaraditya303 Jan 2, 2025
ebadfd1
[3.13] gh-128400: Stop-the-world when manually calling `faulthandler`…
miss-islington Jan 2, 2025
e0f0d2d
[3.13] gh-108202: Document calendar.TextCalendar formatting helpers (…
miss-islington Jan 3, 2025
f8b24cd
[3.13] gh-125674: Doc: Fix type of newfunc first parameter (GH-125675…
miss-islington Jan 3, 2025
b875917
[3.13] gh-127903: Fix a crash on debug builds when calling `Objects/u…
miss-islington Jan 3, 2025
b923f48
[3.13] gh-128456: Use '-reorder-functions=cdsort' for BOLT builds (GH…
miss-islington Jan 3, 2025
855af3b
[3.13] gh-128354: Consistently use LIBS over LDFLAGS in library build…
zanieb Jan 4, 2025
883cb23
[3.13] gh-128152: Argument Clinic: ignore pre-processor directives in…
miss-islington Jan 4, 2025
ff7ef94
[3.13] Docs: mark up json.dump() using parameter list (GH-128482) (#1…
miss-islington Jan 4, 2025
65fd758
[3.13] gh-126719: Clarify math.fmod docs (GH-127741) (#128491)
miss-islington Jan 4, 2025
62b4ca0
[3.13] Docs: amend json.dump() post gh-128482 (GH-128489) (#128493)
miss-islington Jan 4, 2025
5ed2b76
[3.13] gh-127954: Document PyObject_DelItemString (GH-127986) (#128496)
miss-islington Jan 4, 2025
b2bacbb
[3.13] gh-127553: Remove outdated TODO comment in _pydatetime (GH-127…
miss-islington Jan 4, 2025
40fd466
[3.13] gh-128437: Add `BOLT_COMMON_FLAGS` with `-update-debug-section…
miss-islington Jan 5, 2025
f6da93a
[3.13] gh-128504: Upgrade doctest to ubuntu-24.04 (GH-128506) (#128517)
miss-islington Jan 5, 2025
838e8a2
[3.13] Docs: fix `MessageDefect` references in email.policy docs (GH-…
miss-islington Jan 5, 2025
9c5a86d
[3.13] gh-128519: Align the docstring of untokenize() to match the do…
miss-islington Jan 6, 2025
aa519e4
[3.13] gh-114990: Add missing mixin methods in collections.abc's docu…
miss-islington Jan 6, 2025
3678cf8
[3.13] gh-77214: Update outdated documentation for numeric PyArg_Pars…
miss-islington Jan 6, 2025
a194fd0
[3.13] gh-90241: Clarify documentation for PyUnicode_FSConverter and …
miss-islington Jan 6, 2025
d81b99b
[3.13] gh-108202: Document `calendar.Calendar` methods `getfirstweekd…
miss-islington Jan 6, 2025
bbe0b33
[3.13] gh-128146: Exclude os/log.h import on older macOS versions. (G…
miss-islington Jan 7, 2025
8f3e555
[3.13] gh-108202: Document calendar.Calendar.firstweekday (GH-128566)…
miss-islington Jan 7, 2025
692a955
[3.13] gh-128472: Add `-skip-funcs` to BOLT options to fix computed g…
miss-islington Jan 7, 2025
ad3bbb6
[3.13] gh-98188: Fix EmailMessage.get_payload to decode data when CTE…
miss-islington Jan 7, 2025
984cdb7
[3.13] Docs: mark up json.load() using parameter list (GH-128488) (#1…
miss-islington Jan 7, 2025
0cd6036
[3.13] gh-87506: Document that json.load*() can raise UnicodeDecodeEr…
miss-islington Jan 8, 2025
32012ed
[3.13] gh-109413: Add more type hints to `libregrtest` (GH-126352) (#…
miss-islington Jan 8, 2025
c0ba0bc
[3.13] gh-128617: Fix `test_typing.test_readonly_inheritance` (GH-128…
miss-islington Jan 8, 2025
dda55cc
[3.13] gh-41872: Fix quick extraction of module docstrings from a fil…
miss-islington Jan 8, 2025
77b411b
[3.13] gh-128613: Increase `typing.Concatenate` coverage (GH-128614) …
miss-islington Jan 8, 2025
7e099c5
[3.13] gh-128615: Cover pickling of `ParamSpecArgs` and `ParamSpecKwa…
miss-islington Jan 8, 2025
1383588
[3.13] gh-128552: fix refcycles in eager task creation (#128553) (#12…
graingert Jan 8, 2025
4f01a12
[3.13] gh-79149: document reentrant safety of `loop.call_soon_threads…
miss-islington Jan 9, 2025
1d2d62c
[3.13] gh-126137: improve docs for `loop.add_reader` and `loop.add_wr…
miss-islington Jan 9, 2025
c57ef49
[3.13] gh-124433: fix docs for `asyncio.Queue.task_done` (GH-128669) …
miss-islington Jan 9, 2025
0d2b9ab
[3.13] gh-127196: Fix crash in `_interpreters`, when `shared` had inv…
miss-islington Jan 9, 2025
5370ad1
[3.13] gh-126862: Use `Py_ssize_t` instead of `int` when processing t…
miss-islington Jan 10, 2025
65da5db
[3.13] gh-118915: Document `PyUnstable_InterpreterState_GetMainModule…
miss-islington Jan 10, 2025
3714fd0
[3.13] gh-128302: Fix bugs in xml.dom.xmlbuilder (GH-128284) (#128582)
miss-islington Jan 11, 2025
436064a
[3.13] gh-127614: Correctly check for ttyname_r() in configure (#1285…
erlend-aasland Jan 11, 2025
6116e1b
[3.13] gh-128734: Explicitly close sockets in urllib tests (GH-128735…
serhiy-storchaka Jan 12, 2025
33c0ba0
[3.13] gh-128409: Document that pdb.post_mortem() accepts exceptions …
gaogaotiantian Jan 13, 2025
05bd6cb
[3.13] gh-123345: improve `fnmatch` docs (GH-123346) (#128776)
miss-islington Jan 13, 2025
afcf238
[3.13] gh-128595: Add test class helper to force no terminal colour (…
hugovk Jan 13, 2025
632745a
[3.13] gh-128759: fix data race in `type_modified_unlocked` (GH-12876…
miss-islington Jan 13, 2025
66d0636
[3.13] gh-128078: Clear exception in `anext` before calling `_PyGen_S…
miss-islington Jan 13, 2025
b106576
[3.13] gh-128562: Fix generation of the tkinter widget names (GH-1286…
miss-islington Jan 13, 2025
a868628
[3.13] gh-128731: Explicitly close socket on error in robotparser.Rob…
miss-islington Jan 13, 2025
1079619
[3.13] Explicitly import `urllib.error` in `urllib.robotparser` (GH-1…
miss-islington Jan 13, 2025
f2a2809
[3.13] gh-125997: Increase test coverage for `time.sleep()` (GH-12875…
miss-islington Jan 13, 2025
1ec36a6
[3.13] gh-128717: Stop-the-world when setting the recursion limit (GH…
ZeroIntensity Jan 14, 2025
88b4b43
[3.13] gh-109959: Skip test_glob.test_selflink() flaky test (GH-12881…
miss-islington Jan 14, 2025
0998eb6
[3.13] Fix a "doctest" block in `Doc/library/turtle.rst` (GH-128831) …
miss-islington Jan 14, 2025
d2a8d57
[3.13] gh-106320: Document replacement for removed C API (GH-128787) …
miss-islington Jan 14, 2025
132fd38
[3.13] gh-128874: Fix the documentation for blurb 2.0 (GH-128875) (#1…
miss-islington Jan 15, 2025
639e0f3
[3.13] gh-67206: Document that `string.printable` is not printable in…
miss-islington Jan 15, 2025
714b851
[3.13] gh-97850: Suggest `TraversableResources` as the alternative fo…
miss-islington Jan 15, 2025
c927fd9
[3.13] gh-128816: Fix warnings in test_doctest (GH-128817) (GH-128870)
miss-islington Jan 16, 2025
d997ba4
[3.13] gh-58689: Fix os.kill() error handling on Windows (GH-128932) …
miss-islington Jan 17, 2025
9974e71
[3.13] gh-128017: Make a note that sys variables are read-only (GH-12…
miss-islington Jan 17, 2025
dc77f19
[3.13] gh-58956: Fix a frame refleak in bdb (GH-128190) (#128947)
miss-islington Jan 17, 2025
34ded1a
[3.13] gh-128911: Add tests on the PyImport C API (#128915) (#128960)
vstinner Jan 17, 2025
77e29c7
[3.13] Fix definition of a `generator iterator` in `glossary.rst` (GH…
miss-islington Jan 18, 2025
d8a4426
[3.13] gh-128916: Do not set `SO_REUSEPORT` on non-`AF_INET*` sockets…
miss-islington Jan 18, 2025
c75894a
[3.13] gh-128961: Fix exhausted array iterator crash in __setstate__(…
miss-islington Jan 18, 2025
fff334e
[3.13] gh-125997: suggest efficient alternatives for `time.sleep(0)` …
miss-islington Jan 18, 2025
430ccbc
[3.13] gh-111495: Add more tests on PyEval C APIs (#122789) (#128987)
vstinner Jan 18, 2025
fdac362
[3.13] gh-127599: Fix _Py_RefcntAdd missing calls to _Py_INCREF_STAT_…
EdNutting Jan 18, 2025
b7ddcc3
[3.13] gh-121542: Document trailing newline behavior in `set_content(…
miss-islington Jan 18, 2025
453eaa9
[3.13] Pre-commit: Drop specific language version and bump hooks (GH-…
ZeroIntensity Jan 18, 2025
03ee311
[3.13] gh-128998: Fix indentation of numbered list and literal block …
miss-islington Jan 18, 2025
ef99618
[3.13] gh-128991: Release the enter frame reference within bdb callba…
gaogaotiantian Jan 18, 2025
6b47499
[3.13] gh-128679: Fix tracemalloc.stop() race conditions (#128897)
vstinner Jan 18, 2025
2120089
[3.13] gh-80222: Fix email address header folding with long quoted-st…
miss-islington Jan 19, 2025
080d17e
[3.13] gh-129020: Remove ambiguous sentence from `tokenize.untokenize…
miss-islington Jan 20, 2025
5fe7650
[3.13] GH-125722: Increase minimum supported Sphinx to 8.1.3 (GH-1289…
miss-islington Jan 20, 2025
59b919b
[3.13] GH-125722: Use long options for Sphinx (GH-129039) (#129041)
miss-islington Jan 20, 2025
c6a566e
[3.13] gh-71339: Add additional assertion methods in test.support (GH…
serhiy-storchaka Jan 20, 2025
0351ed5
[3.13] Fix a typo in `syslog`'s error message (GH-129029) (#129049)
miss-islington Jan 20, 2025
55d3d81
[3.13] gh-128978: Fix a `NameError` in `sysconfig.expand_makefile_var…
miss-islington Jan 20, 2025
2f8eefe
[3.13] gh-129044: Update glossary entry for 'loader' to reflect curre…
miss-islington Jan 20, 2025
22e9faf
[3.13] Docs C API: Clarify what happens when null bytes are passed to…
miss-islington Jan 20, 2025
a1c48a7
[3.13] gh-128588: gh-128550: remove eager tasks optimization that mis…
miss-islington Jan 20, 2025
03b2ecf
[3.13] GH-128131: Completely support random read access of uncompress…
miss-islington Jan 20, 2025
2077082
[3.13] doc: fix venv creating for the local Python using uv (GH-12909…
miss-islington Jan 20, 2025
c5e1131
[3.13] gh-111178: fix UBSan failures in `Modules/_multiprocessing/sem…
miss-islington Jan 20, 2025
f10f2a2
[3.13] GH-121970: Extract ``changes`` into a new extension (GH-129105…
miss-islington Jan 20, 2025
8ab29d9
[3.13] Docs: fix typo in `Doc/howto/mro.rst` (GH-129095) (GH-129122)
miss-islington Jan 21, 2025
972d953
[3.13] gh-118915: C API: Document compiler flag macros (GH-129028) (G…
miss-islington Jan 21, 2025
383af39
[3.13] gh-128595: Default to stdout isatty for colour detection inste…
hugovk Jan 21, 2025
508ace6
[3.13] gh-122845: fix parameter_list_starargs in function definition …
miss-islington Jan 21, 2025
ffcef2d
[3.13] Move to public Linux arm64 hosted runners (#129146)
diegorusso Jan 21, 2025
0c70453
[3.13] gh-126332: Fix pyrepl crash for double ctrl-z in line overflow…
miss-islington Jan 21, 2025
3048dcd
[3.13] gh-125553: Fix backslash continuation in `untokenize` (GH-1260…
miss-islington Jan 21, 2025
0ddcb61
[3.13] gh-123024: Correctly prepare/restore around help and show-hist…
miss-islington Jan 21, 2025
a379749
[3.13] gh-129093: Fix f-string debug text sometimes getting cut off w…
miss-islington Jan 22, 2025
7f6e80a
[3.13] gh-128894: Fix `TracebackException._format_syntax_error` on cu…
miss-islington Jan 22, 2025
67971cd
[3.13] gh-128770: fix ResourceWarning in test_pyrepl (GH-128906) (#12…
miss-islington Jan 22, 2025
0b90dc8
[3.13] gh-128636: Fix crash in PyREPL when `os.environ` is overwritte…
miss-islington Jan 22, 2025
f7f8b8b
[3.13] gh-124363: Treat debug expressions in f-string as raw strings …
miss-islington Jan 22, 2025
cc3dc8a
[3.13] gh-127873: Only check `sys.flags.ignore_environment` for `PYTH…
hugovk Jan 22, 2025
d674792
[3.13] Add colour to GitHub Actions output (GH-129196) (#129198)
miss-islington Jan 22, 2025
e3b3e01
[3.13] gh-129185: Fix PyTraceMalloc_Untrack() at Python exit (#129191…
vstinner Jan 23, 2025
52ccf26
[3.13] gh-128330: Terminal control characters should be restored on r…
miss-islington Jan 23, 2025
5c102a1
[3.13] gh-118878: Pyrepl: show completions menu below the current lin…
miss-islington Jan 23, 2025
75ec6ca
[3.13] gh-128479: fix asyncio staggered race leaking tasks, and loggi…
miss-islington Jan 23, 2025
6a261a0
[3.13] gh-126172: Fix a misleading statement in PYTHON_BASIC_REPL doc…
miss-islington Jan 23, 2025
eed7865
[3.13] gh-97850: Remove the mention of removal from `ResourceReader` …
miss-islington Jan 23, 2025
1ee321b
[3.13] gh-128679: Clear the ref tracer in _PyTraceMalloc_Stop() (#129…
vstinner Jan 24, 2025
e07a6fe
[3.13] Improve tests for _colorize.can_colorize() (GH-129234) (GH-129…
miss-islington Jan 24, 2025
104bcff
[3.13] GH-125722: Remove Sphinx patches (GH-129277) (#129278)
miss-islington Jan 25, 2025
aa1beed
[3.13] gh-129248: Filter out the iOS log prefix from testbed runner o…
miss-islington Jan 25, 2025
e1900db
[3.13] Replace `strict_concatenate = True` with `extra_checks = True`…
miss-islington Jan 25, 2025
b2ae234
[3.13] gh-126022: make license.rst consistent with LICENSE (GH-128516…
hugovk Jan 25, 2025
bcececd
[3.13] GH-121970: Remove pyspecific ``PyDecoratorMixin`` patches (GH-…
miss-islington Jan 26, 2025
1499f66
[3.13] gh-71339: Use new assertion methods in test_idle (#129314)
terryjreedy Jan 26, 2025
53b7b0f
[3.13] gh-126022: Remove zope.org from the permitted linkcheck redire…
miss-islington Jan 26, 2025
6e88741
[3.13] gh-123987: Fix NotADirectoryError in NamespaceReader when sent…
miss-islington Jan 26, 2025
98c25b8
[3.13] gh-129156: Fix variable quoting in `android-env.sh` script (GH…
freakboy3742 Jan 27, 2025
c7f9e74
[3.13] gh-129061: Fix `FORCE_COLOR` and `NO_COLOR` when empty strings…
miss-islington Jan 27, 2025
d7d4edf
[3.13] gh-109975: Add list of 3.13 removed library replacements (GH-1…
miss-islington Jan 27, 2025
247c3b2
[3.13] gh-129346: Handle allocation errors for SQLite aggregate conte…
miss-islington Jan 27, 2025
5829f7b
[3.13] gh-119511: Fix a potential denial of service in imaplib (GH-11…
miss-islington Jan 27, 2025
87d587f
[3.13] GH-124398: Pin LLVM to 18.1.0 for Windows JIT CI (GH-124399) (…
miss-islington Jan 27, 2025
332426b
[3.13] gh-85046: Document errno constants (GH-126420) (#129383)
miss-islington Jan 28, 2025
bf6c256
[3.13] gh-112064: Fix incorrect handling of negative read sizes in `H…
miss-islington Jan 28, 2025
8597be4
[3.13] gh-129408: http: Fix typo 'RFF' to RFC' in docstring (GH-12941…
miss-islington Jan 28, 2025
48b87d1
[3.13] gh-129409: Fix Integer overflow - SEGV while writing data mor…
miss-islington Jan 29, 2025
1883667
[3.13] CI: Change job name to 'build arm64' on Windows (GH-129434) (#…
miss-islington Jan 29, 2025
f502c8f
[3.13] gh-118761: Improve import time of `subprocess` (GH-129427) (#1…
miss-islington Jan 29, 2025
8b4a0d6
[3.13] gh-125522: Fix bare except in `test_uuid` (GH-129018) (#129455)
miss-islington Jan 29, 2025
25a3f3a
[3.13] remove type annotations from multiprocessing. (GH-129381) (#12…
miss-islington Jan 30, 2025
ad4a141
[3.13] gh-129403: Fix `ValueError` messages in `asyncio.Barrier` and …
miss-islington Jan 30, 2025
fcb2656
[3.13] gh-129438: Update ``--enable-experimental-jit`` section with i…
miss-islington Jan 30, 2025
a853e2f
[3.13] gh-128799: Add frame of except* to traceback when wrapping a n…
iritkatriel Jan 30, 2025
9a59a51
[3.13] gh-111495: Add PyFile tests (#129449) (#129477)
vstinner Jan 30, 2025
80f40a1
gh-127349: Add check for correct resizing in REPL (#127387)
donbarbos Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[3.13] gh-127873: Only check sys.flags.ignore_environment for `PYTH…
…ON*` env vars (GH-127877) (#129138)
  • Loading branch information
hugovk authored Jan 22, 2025
commit cc3dc8ab24f872c8d31ddbc4fce7ff1213ec5529
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -267,3 +267,7 @@ Lib/test/test_interpreters/ @ericsnowcurrently
# Config Parser
Lib/configparser.py @jaraco
Lib/test/test_configparser.py @jaraco

# Colorize
Lib/_colorize.py @hugovk
Lib/test/test__colorize.py @hugovk
13 changes: 6 additions & 7 deletions Lib/_colorize.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,14 @@ def can_colorize(*, file=None) -> bool:
return False
if os.environ.get("PYTHON_COLORS") == "1":
return True
if "NO_COLOR" in os.environ:
return False
if "NO_COLOR" in os.environ:
return False
if not COLORIZE:
return False
if not sys.flags.ignore_environment:
if "FORCE_COLOR" in os.environ:
return True
if os.environ.get("TERM") == "dumb":
return False
if "FORCE_COLOR" in os.environ:
return True
if os.environ.get("TERM") == "dumb":
return False

if not hasattr(file, "fileno"):
return False
Expand Down
11 changes: 11 additions & 0 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"without_optimizer",
"force_not_colorized",
"force_not_colorized_test_class",
"make_clean_env",
"BrokenIter",
]

Expand Down Expand Up @@ -2732,6 +2733,16 @@ def new_setUpClass(cls):
return cls


def make_clean_env() -> dict[str, str]:
clean_env = os.environ.copy()
for k in clean_env.copy():
if k.startswith("PYTHON"):
clean_env.pop(k)
clean_env.pop("FORCE_COLOR", None)
clean_env.pop("NO_COLOR", None)
return clean_env


def initialized_with_pyrepl():
"""Detect whether PyREPL was used during Python initialization."""
# If the main module has a __file__ attribute it's a Python module, which means PyREPL.
Expand Down
10 changes: 9 additions & 1 deletion Lib/test/test__colorize.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import unittest
import unittest.mock
import _colorize
from test.support import force_not_colorized
from test.support import force_not_colorized, make_clean_env

ORIGINAL_CAN_COLORIZE = _colorize.can_colorize

Expand All @@ -17,6 +17,14 @@ def tearDownModule():


class TestColorizeFunction(unittest.TestCase):
def setUp(self):
# Remove PYTHON* environment variables to isolate from local user
# settings and simulate running with `-E`. Such variables should be
# added to test methods later to patched os.environ.
patcher = unittest.mock.patch("os.environ", new=make_clean_env())
self.addCleanup(patcher.stop)
patcher.start()

@force_not_colorized
def test_colorized_detection_checks_for_environment_variables(self):
flags = unittest.mock.MagicMock(ignore_environment=False)
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_capi/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ class InstanceMethod:
id = _testcapi.instancemethod(id)
testfunction = _testcapi.instancemethod(testfunction)


@support.force_not_colorized_test_class
class CAPITest(unittest.TestCase):

def test_instancemethod(self):
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_cmd_line_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ def _make_test_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
importlib.invalidate_caches()
return to_return


@support.force_not_colorized_test_class
class CmdLineTest(unittest.TestCase):
def _check_output(self, script_name, exit_code, data,
expected_file, expected_argv0,
Expand Down
1 change: 1 addition & 0 deletions Lib/test/test_compileall.py
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,7 @@ def test_d_compile_error(self):
rc, out, err = self.assertRunNotOK('-q', '-d', 'dinsdale', self.pkgdir)
self.assertRegex(out, b'File "dinsdale')

@support.force_not_colorized
def test_d_runtime_error(self):
bazfn = script_helper.make_script(self.pkgdir, 'baz', 'raise Exception')
self.assertRunOK('-q', '-d', 'dinsdale', self.pkgdir)
Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_eof.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import sys
from codecs import BOM_UTF8
from test import support
from test.support import force_not_colorized
from test.support import os_helper
from test.support import script_helper
from test.support import warnings_helper
Expand Down Expand Up @@ -44,6 +44,7 @@ def test_EOFS(self):
self.assertEqual(cm.exception.text, "ä = '''thîs is ")
self.assertEqual(cm.exception.offset, 5)

@force_not_colorized
def test_EOFS_with_file(self):
expect = ("(<string>, line 1)")
with os_helper.temp_dir() as temp_dir:
Expand Down Expand Up @@ -123,6 +124,7 @@ def test_line_continuation_EOF(self):
self.assertEqual(str(cm.exception), expect)

@unittest.skipIf(not sys.executable, "sys.executable required")
@force_not_colorized
def test_line_continuation_EOF_from_file_bpo2180(self):
"""Ensure tok_nextc() does not add too many ending newlines."""
with os_helper.temp_dir() as temp_dir:
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1465,6 +1465,7 @@ def gen():

@cpython_only
@unittest.skipIf(_testcapi is None, "requires _testcapi")
@force_not_colorized
def test_recursion_normalizing_infinite_exception(self):
# Issue #30697. Test that a RecursionError is raised when
# maximum recursion depth has been exceeded when creating
Expand Down Expand Up @@ -2157,6 +2158,7 @@ def test_multiline_not_highlighted(self):
self.assertEqual(result[-len(expected):], expected)


@support.force_not_colorized_test_class
class SyntaxErrorTests(unittest.TestCase):
maxDiff = None

Expand Down
18 changes: 15 additions & 3 deletions Lib/test/test_import/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,20 @@

from test.support import os_helper
from test.support import (
STDLIB_DIR, swap_attr, swap_item, cpython_only, is_apple_mobile, is_emscripten,
is_wasi, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS,
requires_gil_enabled, Py_GIL_DISABLED)
STDLIB_DIR,
swap_attr,
swap_item,
cpython_only,
is_apple_mobile,
is_emscripten,
is_wasi,
run_in_subinterp,
run_in_subinterp_with_config,
Py_TRACE_REFS,
requires_gil_enabled,
Py_GIL_DISABLED,
force_not_colorized_test_class,
)
from test.support.import_helper import (
forget, make_legacy_pyc, unlink, unload, ready_to_import,
DirsOnSysPath, CleanImport, import_module)
Expand Down Expand Up @@ -352,6 +363,7 @@ def _from_subinterp(cls, name, interpid, pipe, script_kwargs):
return cls.parse(text.decode())


@force_not_colorized_test_class
class ImportTests(unittest.TestCase):

def setUp(self):
Expand Down
1 change: 1 addition & 0 deletions Lib/test/test_inspect/test_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -880,6 +880,7 @@ def test_getsource_stdlib_decimal(self):
self.assertEqual(src.splitlines(True), lines)

class TestGetsourceInteractive(unittest.TestCase):
@support.force_not_colorized
def test_getclasses_interactive(self):
# bpo-44648: simulate a REPL session;
# there is no `__file__` in the __main__ module
Expand Down
10 changes: 0 additions & 10 deletions Lib/test/test_pyrepl/support.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,6 @@ def handle_all_events(
)


def make_clean_env() -> dict[str, str]:
clean_env = os.environ.copy()
for k in clean_env.copy():
if k.startswith("PYTHON"):
clean_env.pop(k)
clean_env.pop("FORCE_COLOR", None)
clean_env.pop("NO_COLOR", None)
return clean_env


class FakeConsole(Console):
def __init__(self, events, encoding="utf-8") -> None:
self.events = iter(events)
Expand Down
3 changes: 1 addition & 2 deletions Lib/test/test_pyrepl/test_pyrepl.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import tempfile
from unittest import TestCase, skipUnless, skipIf
from unittest.mock import patch
from test.support import force_not_colorized
from test.support import force_not_colorized, make_clean_env
from test.support import SHORT_TIMEOUT
from test.support.import_helper import import_module
from test.support.os_helper import unlink
Expand All @@ -23,7 +23,6 @@
multiline_input,
code_to_events,
clean_screen,
make_clean_env,
)
from _pyrepl.console import Event
from _pyrepl.readline import (ReadlineAlikeReader, ReadlineConfig,
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_regrtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,7 @@ def test_finds_expected_number_of_tests(self):
f'{", ".join(output.splitlines())}')


@support.force_not_colorized_test_class
class ProgramsTestCase(BaseTestCase):
"""
Test various ways to run the Python test suite. Use options close
Expand Down Expand Up @@ -902,6 +903,7 @@ def test_pcbuild_rt(self):
self.run_batch(script, *rt_args, *self.regrtest_args, *self.tests)


@support.force_not_colorized_test_class
class ArgsTestCase(BaseTestCase):
"""
Test arguments of the Python test suite.
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_repl.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def run_on_interactive_mode(source):
return output


@support.force_not_colorized_test_class
class TestInteractiveInterpreter(unittest.TestCase):

@cpython_only
Expand Down Expand Up @@ -273,6 +274,8 @@ def test_asyncio_repl_is_ok(self):

self.assertEqual(exit_code, 0, "".join(output))


@support.force_not_colorized_test_class
class TestInteractiveModeSyntaxErrors(unittest.TestCase):

def test_interactive_syntax_error_correct_line(self):
Expand Down
11 changes: 9 additions & 2 deletions Lib/test/test_runpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,14 @@
import textwrap
import unittest
import warnings
from test.support import (infinite_recursion, no_tracing, verbose,
requires_subprocess, requires_resource)
from test.support import (
force_not_colorized_test_class,
infinite_recursion,
no_tracing,
requires_resource,
requires_subprocess,
verbose,
)
from test.support.import_helper import forget, make_legacy_pyc, unload
from test.support.os_helper import create_empty_file, temp_dir, FakePath
from test.support.script_helper import make_script, make_zip_script
Expand Down Expand Up @@ -758,6 +764,7 @@ def test_encoding(self):
self.assertEqual(result['s'], "non-ASCII: h\xe9")


@force_not_colorized_test_class
class TestExit(unittest.TestCase):
STATUS_CONTROL_C_EXIT = 0xC000013A
EXPECTED_CODE = (
Expand Down
1 change: 1 addition & 0 deletions Lib/test/test_tracemalloc.py
Original file line number Diff line number Diff line change
Expand Up @@ -981,6 +981,7 @@ def check_sys_xoptions_invalid(self, nframe):
return
self.fail(f"unexpected output: {stderr!a}")

@force_not_colorized
def test_sys_xoptions_invalid(self):
for nframe in INVALID_NFRAME:
with self.subTest(nframe=nframe):
Expand Down
11 changes: 9 additions & 2 deletions Lib/test/test_unicodedata.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@
import sys
import unicodedata
import unittest
from test.support import (open_urlresource, requires_resource, script_helper,
cpython_only, check_disallow_instantiation)
from test.support import (
open_urlresource,
requires_resource,
script_helper,
cpython_only,
check_disallow_instantiation,
force_not_colorized,
)


class UnicodeMethodsTest(unittest.TestCase):
Expand Down Expand Up @@ -277,6 +283,7 @@ def test_disallow_instantiation(self):
# Ensure that the type disallows instantiation (bpo-43916)
check_disallow_instantiation(self, unicodedata.UCD)

@force_not_colorized
def test_failed_import_during_compiling(self):
# Issue 4367
# Decoding \N escapes requires the unicodedata module. If it can't be
Expand Down
1 change: 1 addition & 0 deletions Lib/test/test_unittest/test_program.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from test.test_unittest.test_result import BufferedWriter


@support.force_not_colorized_test_class
class Test_TestProgram(unittest.TestCase):

def test_discovery_from_dotted_path(self):
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_unittest/test_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def bad_cleanup2():
raise ValueError('bad cleanup2')


@force_not_colorized_test_class
class Test_TestResult(unittest.TestCase):
# Note: there are not separate tests for TestResult.wasSuccessful(),
# TestResult.errors, TestResult.failures, TestResult.testsRun or
Expand Down Expand Up @@ -456,6 +457,7 @@ def test(result):
self.assertTrue(stream.getvalue().endswith('\n\nOK\n'))


@force_not_colorized_test_class
class Test_TextTestResult(unittest.TestCase):
maxDiff = None

Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_unittest/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ def cleanup2(*args, **kwargs):
self.assertTrue(test.doCleanups())
self.assertEqual(cleanups, [(2, (), {}), (1, (1, 2, 3), dict(four='hello', five='goodbye'))])

@support.force_not_colorized
def testCleanUpWithErrors(self):
class TestableTest(unittest.TestCase):
def testNothing(self):
Expand Down Expand Up @@ -249,6 +250,7 @@ def testNothing(self):
self.assertEqual(test._cleanups, [])


@support.force_not_colorized_test_class
class TestClassCleanup(unittest.TestCase):
def test_addClassCleanUp(self):
class TestableTest(unittest.TestCase):
Expand Down Expand Up @@ -601,6 +603,7 @@ class EmptyTest(unittest.TestCase):
self.assertIn("\nNO TESTS RAN\n", runner.stream.getvalue())


@support.force_not_colorized_test_class
class TestModuleCleanUp(unittest.TestCase):
def test_add_and_do_ModuleCleanup(self):
module_cleanups = []
Expand Down Expand Up @@ -1318,6 +1321,7 @@ def MockResultClass(*args):
expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY)
self.assertEqual(runner._makeResult(), expectedresult)

@support.force_not_colorized
@support.requires_subprocess()
def test_warnings(self):
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
When ``-E`` is set, only ignore ``PYTHON_COLORS`` and not
``FORCE_COLOR``/``NO_COLOR``/``TERM`` when colourising output.
Patch by Hugo van Kemenade.