diff --git a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch index c1bf790..c66b4b7 100644 --- a/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch +++ b/CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch @@ -4,9 +4,11 @@ Lib/test/test_xml_etree.py | 10 ++++++++++ 3 files changed, 17 insertions(+) ---- a/Lib/test/test_pyexpat.py -+++ b/Lib/test/test_pyexpat.py -@@ -794,6 +794,10 @@ class ReparseDeferralTest(unittest.TestC +Index: Python-3.12.10/Lib/test/test_pyexpat.py +=================================================================== +--- Python-3.12.10.orig/Lib/test/test_pyexpat.py 2025-04-11 21:04:45.031445243 +0200 ++++ Python-3.12.10/Lib/test/test_pyexpat.py 2025-04-11 21:16:30.736034401 +0200 +@@ -794,6 +794,10 @@ self.assertEqual(started, ['doc']) def test_reparse_deferral_disabled(self): @@ -17,9 +19,11 @@ started = [] def start_element(name, _): ---- a/Lib/test/test_sax.py -+++ b/Lib/test/test_sax.py -@@ -1240,6 +1240,9 @@ class ExpatReaderTest(XmlTestBase): +Index: Python-3.12.10/Lib/test/test_sax.py +=================================================================== +--- Python-3.12.10.orig/Lib/test/test_sax.py 2025-04-11 21:04:45.061811205 +0200 ++++ Python-3.12.10/Lib/test/test_sax.py 2025-04-11 21:16:30.736607523 +0200 +@@ -1240,6 +1240,9 @@ self.assertEqual(result.getvalue(), start + b"") @@ -29,11 +33,13 @@ def test_flush_reparse_deferral_disabled(self): result = BytesIO() xmlgen = XMLGenerator(result) ---- a/Lib/test/test_xml_etree.py -+++ b/Lib/test/test_xml_etree.py -@@ -121,6 +121,11 @@ ATTLIST_XML = """\ - - """ +Index: Python-3.12.10/Lib/test/test_xml_etree.py +=================================================================== +--- Python-3.12.10.orig/Lib/test/test_xml_etree.py 2025-04-11 21:04:45.473815938 +0200 ++++ Python-3.12.10/Lib/test/test_xml_etree.py 2025-04-11 21:16:30.737465180 +0200 +@@ -138,6 +138,11 @@ + return mock.patch.object(cls, "__eq__", autospec=True, wraps=eq) + +IS_SLE_15_6 = os.environ.get("SLE_VERSION", "") == "0150600" +fails_with_expat_2_6_0 = (unittest.expectedFailure @@ -43,7 +49,7 @@ def checkwarnings(*filters, quiet=False): def decorator(test): def newtest(*args, **kwargs): -@@ -1424,9 +1429,11 @@ class XMLPullParserTest(unittest.TestCas +@@ -1441,9 +1446,11 @@ self.assert_event_tags(parser, [('end', 'root')]) self.assertIsNone(parser.close()) @@ -55,7 +61,7 @@ def test_simple_xml_chunk_5(self): self.test_simple_xml(chunk_size=5, flush=True) -@@ -1651,6 +1658,9 @@ class XMLPullParserTest(unittest.TestCas +@@ -1668,6 +1675,9 @@ self.assert_event_tags(parser, [('end', 'doc')]) diff --git a/F00251-change-user-install-location.patch b/F00251-change-user-install-location.patch index f6e4f6d..02973fe 100644 --- a/F00251-change-user-install-location.patch +++ b/F00251-change-user-install-location.patch @@ -28,9 +28,11 @@ Co-authored-by: Lumír Balhar Lib/test/test_sysconfig.py | 17 +++++++++++++-- 2 files changed, 65 insertions(+), 3 deletions(-) ---- a/Lib/sysconfig.py -+++ b/Lib/sysconfig.py -@@ -104,6 +104,11 @@ if os.name == 'nt': +Index: Python-3.12.10/Lib/sysconfig.py +=================================================================== +--- Python-3.12.10.orig/Lib/sysconfig.py 2025-04-11 21:04:43.494305425 +0200 ++++ Python-3.12.10/Lib/sysconfig.py 2025-04-11 21:04:51.517931810 +0200 +@@ -104,6 +104,11 @@ else: _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] @@ -42,7 +44,7 @@ Co-authored-by: Lumír Balhar # NOTE: site.py has copy of this function. # Sync it when modify this function. -@@ -163,13 +168,28 @@ if _HAS_USER_BASE: +@@ -163,13 +168,28 @@ }, } @@ -71,7 +73,7 @@ Co-authored-by: Lumír Balhar _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) # Mutex guarding initialization of _CONFIG_VARS. _CONFIG_VARS_LOCK = threading.RLock() -@@ -261,11 +281,40 @@ def _extend_dict(target_dict, other_dict +@@ -268,11 +288,40 @@ target_dict[key] = value @@ -113,9 +115,11 @@ Co-authored-by: Lumír Balhar if os.name == 'nt': # On Windows we want to substitute 'lib' for schemes rather # than the native value (without modifying vars, in case it ---- a/Lib/test/test_sysconfig.py -+++ b/Lib/test/test_sysconfig.py -@@ -119,8 +119,19 @@ class TestSysConfig(unittest.TestCase): +Index: Python-3.12.10/Lib/test/test_sysconfig.py +=================================================================== +--- Python-3.12.10.orig/Lib/test/test_sysconfig.py 2025-04-11 21:04:45.175417431 +0200 ++++ Python-3.12.10/Lib/test/test_sysconfig.py 2025-04-11 21:04:51.518393464 +0200 +@@ -119,8 +119,19 @@ for scheme in _INSTALL_SCHEMES: for name in _INSTALL_SCHEMES[scheme]: expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) @@ -136,7 +140,7 @@ Co-authored-by: Lumír Balhar os.path.normpath(expected), ) -@@ -353,7 +364,7 @@ class TestSysConfig(unittest.TestCase): +@@ -353,7 +364,7 @@ self.assertTrue(os.path.isfile(config_h), config_h) def test_get_scheme_names(self): @@ -145,7 +149,7 @@ Co-authored-by: Lumír Balhar if HAS_USER_BASE: wanted.extend(['nt_user', 'osx_framework_user', 'posix_user']) self.assertEqual(get_scheme_names(), tuple(sorted(wanted))) -@@ -365,6 +376,8 @@ class TestSysConfig(unittest.TestCase): +@@ -365,6 +376,8 @@ cmd = "-c", "import sysconfig; print(sysconfig.get_platform())" self.assertEqual(py.call_real(*cmd), py.call_link(*cmd)) diff --git a/Python-3.12.10.tar.xz b/Python-3.12.10.tar.xz new file mode 100644 index 0000000..a673e29 --- /dev/null +++ b/Python-3.12.10.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07ab697474595e06f06647417d3c7fa97ded07afc1a7e4454c5639919b46eaea +size 20520960 diff --git a/Python-3.12.10.tar.xz.asc b/Python-3.12.10.tar.xz.asc new file mode 100644 index 0000000..8283288 --- /dev/null +++ b/Python-3.12.10.tar.xz.asc @@ -0,0 +1,18 @@ +-----BEGIN PGP SIGNATURE----- + +iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmf1EjJfFIAAAAAALgAo +aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx +Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6 +YwXAwBAAncWm4sMrSvGW4bgyp7bHE0CeaA9ErIq55CmHfigrlxPKQUYVlzj38N7H +MVlpmqZSQ8wqDFy3gN0QeCXBGapxgO2dEcrgy5HxvtktXge25j1f7LvVraSFB9/F +DrOCZr54gVrE/r0242f1JmJQ1BDeMDSUbEYE6fd0xqWYCZ2xpzvYmQG/+6jD5FFC +UE6PYxJlq+rfSawj974//BDhrY4hZ3g0xxyiyhfXBBYMhZO3OzCckrAD5zZOQfNE +y/JK94nVWXLU/Lx3R+L7TvJgJ3ej4ggq5LRwrn09GU5jExwyITh4yUO7i56vbmvx +EtOobQC0RVz/xrsciJ4Gn3zByaO0XPjrGaCOU53nCsNlfJcBQhj2UQpum8CL9S9C +BJPCV4jL+Mo8EL91cJTyX4LqFoAXayMwPS0HKVOvYn33+pmVNe+duY/UjUpG50kw +jdsHbKAthh8QbSIO0VPk4eH3pVEQ3O9aG+3r/puGjPRWG8CMyLbQUVmlj4Sh3/Kh +vh7ydOjzJeuIUhAmFOLLqYG4mah71q1yBXx9jhyxzQSwvyoQaQwgpA+Yn+yB1bXy +ttxp2r4fS0ZvGYB44C1WrAxeKRI+J1z19i1IYMc2bV6SfSBoU9AaJqh2o4dMHHUS +F3Ko4UTyjU4bTfI18dCs2OgUEED6BAe5cs3ZyqDm3zL4fGIgNXs= +=k0VQ +-----END PGP SIGNATURE----- diff --git a/Python-3.12.10.tar.xz.sigstore b/Python-3.12.10.tar.xz.sigstore new file mode 100644 index 0000000..edb8a40 --- /dev/null +++ b/Python-3.12.10.tar.xz.sigstore @@ -0,0 +1 @@ +{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICyDCCAk+gAwIBAgIUV/pqMus1I52YzHj6d8XivxhMQIUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwNDA4MTIxMTIwWhcNMjUwNDA4MTIyMTIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWygZnqBGHMJ6qn1QvD7+VsHJruX4Z3T9PUzXTmbl/fpD/n1GPY3Mp5pB50d6U2rfpbCSYERgppKvcuykX9qTaaOCAW4wggFqMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUt8+5h4MSS5dk0L9D1ytJzB5Vs7QwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHwYDVR0RAQH/BBUwE4ERdGhvbWFzQHB5dGhvbi5vcmcwKQYKKwYBBAGDvzABAQQbaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tMCsGCisGAQQBg78wAQgEHQwbaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tMIGJBgorBgEEAdZ5AgQCBHsEeQB3AHUA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGWFU/nEwAABAMARjBEAiBIlU/EjElPuHeg0S/ByFOF7MDUsJus2IcrFZ1jOj/D1wIgEugM3UFxN3SFgLU+K9GMo6rciVW+P+9SQxiSrXDydrwwCgYIKoZIzj0EAwMDZwAwZAIwNkqoiOIKLy1qh7S7nijCh3pmS8ol+lP9vR19kzBLU0UseRpk/RHJQKL/aUHdFuOsAjBfHDXC7SC/3/659CBDEDR8tjGHB0wrgTOr3askW3HD70Xjnkgh6FCnrRTb3fLVKCE="}, "tlogEntries": [{"logIndex": "193829212", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1744114280", "inclusionPromise": {"signedEntryTimestamp": "MEUCIQDBIo5pHwogbg/goPtkWgVyz8zFP/olU2b+OU3SrU1TxQIgGh9u+YsN9LPcQTyoa6wCQmcwyEixANgLIfSb9iMDj04="}, "inclusionProof": {"logIndex": "71924950", "rootHash": "UjYqyELsc0qjUIHDSygvBe1JfXf3lGvpJDFvzqH7MWY=", "treeSize": "71924951", "hashes": ["o8iZ18aF/C6mMqtk487ge7PxtY95U6iXJ8aGmYXsDgU=", "Fw/vO9/kdamS2X70S5CmsF2B31S2RUX9ey/YY6DCQdE=", "1SHDD4NA+lqeJ7CG3KQuHpxGYl96AfqFn35U2bXxa2M=", "5yOaWkOXu1U6FhwkSs/Q5LvlfzKaoIDmsjZuCp7d9+o=", "wwcWBqOQyJLSK5Nwv8la9mGM4JTdemmwnHJxjdS2+zM=", "TzNxImLzqcFj7Mw6ijhc3K+oqOOChRwEsN45HmmR5Dg=", "HuWZg7u4+Jt1xi9OThUa81qCPhcfNnk7f65sB+Ydo+4=", "Uhh7+7E3v+7XORukXCZuNmoD2orl9UZRSHY0l4VjPKk=", "3KxPDv8uRtvXjzsH0IV9lZeXU31GVI2JE78JftFzcgM=", "ZiXTzR4fu03x4ORDazcYIvmdsRcp0oLWMY0I0ewiDRw=", "wz8AVqzGBjixNiXtnCb16MFP7zOW54eYx/zJ/1Jey/E=", "K26LG80DXyb+bC58c4Nw00WigG52v0PCsZGY3ExGsts=", "WEm5OgPzJpYROv+4CcrieexCYyQKrLUH3hbxmcQQ+DM=", "7v8qPHNDLerpduaMx06eb/MwgoQwczTn/cYGKX/9wZ4="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n71924951\nUjYqyELsc0qjUIHDSygvBe1JfXf3lGvpJDFvzqH7MWY=\n\n\u2014 rekor.sigstore.dev wNI9ajBEAiAcWE2EYs/YqdFFFfYRhXj7zoff3e6rDoGaffPaGnpWBwIgGaYvZPKB8qJLWt1KDBCDbqm7yqfGt7n3dErdPpIi1Xg=\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwN2FiNjk3NDc0NTk1ZTA2ZjA2NjQ3NDE3ZDNjN2ZhOTdkZWQwN2FmYzFhN2U0NDU0YzU2Mzk5MTliNDZlYWVhIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUURHYVBYbVZicnBHaEFQTS9hQ0VvOXFZWFN1V2hVUWNZOHp1bDVxWEJialpRSWhBTVFnOGpkM01BYm43WUw0Tk9IK1JpUjZaWE5hWStsTGk4K2dzWUNpR25ZRyIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjVSRU5EUVdzclowRjNTVUpCWjBsVlZpOXdjVTExY3pGSk5USlpla2hxTm1RNFdHbDJlR2hOVVVsVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZkMDVFUVRSTlZFbDRUVlJKZDFkb1kwNU5hbFYzVGtSQk5FMVVTWGxOVkVsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZYZVdkYWJuRkNSMGhOU2paeGJqRlJka1EzSzFaelNFcHlkVmcwV2pOVU9WQlZlbGdLVkcxaWJDOW1jRVF2YmpGSFVGa3pUWEExY0VJMU1HUTJWVEp5Wm5CaVExTlpSVkpuY0hCTGRtTjFlV3RZT1hGVVlXRlBRMEZYTkhkblowWnhUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlYwT0NzMUNtZzBUVk5UTldSck1FdzVSREY1ZEVwNlFqVldjemRSZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoM1dVUldVakJTUVZGSUwwSkNWWGRGTkVWU1pFZG9kbUpYUm5wUlNFSTFaRWRvZG1KcE5YWmpiV04zUzFGWlMwdDNXVUpDUVVkRWRucEJRZ3BCVVZGaVlVaFNNR05JVFRaTWVUbG9XVEpPZG1SWE5UQmplVFZ1WWpJNWJtSkhWWFZaTWpsMFRVTnpSME5wYzBkQlVWRkNaemM0ZDBGUlowVklVWGRpQ21GSVVqQmpTRTAyVEhrNWFGa3lUblprVnpVd1kzazFibUl5T1c1aVIxVjFXVEk1ZEUxSlIwcENaMjl5UW1kRlJVRmtXalZCWjFGRFFraHpSV1ZSUWpNS1FVaFZRVE5VTUhkaGMySklSVlJLYWtkU05HTnRWMk16UVhGS1MxaHlhbVZRU3pNdmFEUndlV2RET0hBM2J6UkJRVUZIVjBaVkwyNUZkMEZCUWtGTlFRcFNha0pGUVdsQ1NXeFZMMFZxUld4UWRVaGxaekJUTDBKNVJrOUdOMDFFVlhOS2RYTXlTV055UmxveGFrOXFMMFF4ZDBsblJYVm5UVE5WUm5oT00xTkdDbWRNVlN0TE9VZE5ielp5WTJsV1Z5dFFLemxUVVhocFUzSllSSGxrY25kM1EyZFpTVXR2V2tsNmFqQkZRWGROUkZwM1FYZGFRVWwzVG10eGIybFBTVXNLVEhreGNXZzNVemR1YVdwRGFETndiVk00YjJ3cmJGQTVkbEl4T1d0NlFreFZNRlZ6WlZKd2F5OVNTRXBSUzB3dllWVklaRVoxVDNOQmFrSm1TRVJZUXdvM1UwTXZNeTgyTlRsRFFrUkZSRkk0ZEdwSFNFSXdkM0puVkU5eU0yRnphMWN6U0VRM01GaHFibXRuYURaR1EyNXlVbFJpTTJaTVZrdERSVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}], "timestampVerificationData": {}}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "B6tpdHRZXgbwZkdBfTx/qX3tB6/Bp+RFTFY5kZtG6uo="}, "signature": "MEYCIQDGaPXmVbrpGhAPM/aCEo9qYXSuWhUQcY8zul5qXBbjZQIhAMQg8jd3MAbn7YL4NOH+RiR6ZXNaY+lLi8+gsYCiGnYG"}} diff --git a/Python-3.12.9.tar.xz b/Python-3.12.9.tar.xz deleted file mode 100644 index 7dc0d12..0000000 --- a/Python-3.12.9.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7220835d9f90b37c006e9842a8dff4580aaca4318674f947302b8d28f3f81112 -size 20502440 diff --git a/Python-3.12.9.tar.xz.asc b/Python-3.12.9.tar.xz.asc deleted file mode 100644 index d024ab7..0000000 --- a/Python-3.12.9.tar.xz.asc +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmeiX7JfFIAAAAAALgAo -aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx -Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6 -YwXTqw//VlGJA5CRDfljMwN9BmG2hdXB1B7Lj0PssuAo4A/lH99gb4DRVDS9LNjr -99WdH/fQQovx6rTbtyJnN8Vh7SSduBi/vOc5n5VOXZB0buqR0l+0wu4m43Slu6xP -fXO349Hr6585lemU8x54TrP756rSVUhy3T+krUuNDL9W1Wrp2yDCpt4tUoEhNXGw -DoYS8MrK/ygLNV/7p2DeMWOHNdbjKNH6rfzl60IAwAp7oANcyoj6Pho960bbeUDo -tb47Pw0WWZv3EuITP6bPa8+Z6dj096cFL3AQJ3ap16OduwiaOsGhqTfe4+kbp6ut -Gp/1HeIHzPbEV0E5K78RWHuzBYgU1oPGiMjlp7WkA7bP2OSTF7nM4EBkiiihk2qx -3d5VF9wpVRJ4AuR/aWcWcMnvD2ziSWfzZM3Z3VLnTaWYpuRkQp8TTiFr1vHqxMYm -p/8AozzBJMfOS6u/Q0WNAdk6x3VB0DXnTAETXQVIrex4DXqX/3WSMWK5/x/OyCh9 -ytdreIQYbv1KvlNQJkgpPb7jlUSXp8t9fHCXt4hszhJgtjwIj/+CuSeAgX0bhopV -XsqOBseDNhATg38mhwBVaeFKGRpxsKdpxcdqSEGKuhXtEI/hJmkpZGw49gy3xWxB -KlgRgKjCPw+BGAIVV9qvdtJzam8a09SKVcslqgF619q0byQoBmo= -=1TbP ------END PGP SIGNATURE----- diff --git a/Python-3.12.9.tar.xz.sigstore b/Python-3.12.9.tar.xz.sigstore deleted file mode 100644 index 1403d92..0000000 --- a/Python-3.12.9.tar.xz.sigstore +++ /dev/null @@ -1 +0,0 @@ -{"mediaType": "application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial": {"certificate": {"rawBytes": "MIICzDCCAlGgAwIBAgIURTUfXRvqHjmDrUaHk+FetMa/yUIwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwMjA0MTg0NDI1WhcNMjUwMjA0MTg1NDI1WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERw4E88OE+Kka1dO54CLpErUU6fdlwMd6ChuL9rXtu8kq8xC6gbNjsVqN1bFBdDsRe8+EpP7VT7T0X7oto90xb6OCAXAwggFsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUNGXX3GOz7CXqRAPGCpmWTcOuEbEwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHwYDVR0RAQH/BBUwE4ERdGhvbWFzQHB5dGhvbi5vcmcwKQYKKwYBBAGDvzABAQQbaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tMCsGCisGAQQBg78wAQgEHQwbaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tMIGLBgorBgEEAdZ5AgQCBH0EewB5AHcA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGU0kcjwAAABAMASDBGAiEA88w9QbNsdJkrlbcJRDfDc5zN3M9iZTy+FOEmWF4llxYCIQDQOMoLvyJ5epD8bjP4ZJtkawsrINglKoTZbNTVukd7IjAKBggqhkjOPQQDAwNpADBmAjEAjzAEFF4PV7TKUZPtsEg5vPlBqTF6TM9xdnmX8RPXTXdDw+UjhK16cjgbc2PWb4/xAjEA4HgAk8dxEyw4filZ7a7M8XJbZIX5CNlsE8OAz1gVCbtlxYv9BnF0R1GPnZv6pJrM"}, "tlogEntries": [{"logIndex": "168669956", "logId": {"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion": {"kind": "hashedrekord", "version": "0.0.1"}, "integratedTime": "1738694665", "inclusionPromise": {"signedEntryTimestamp": "MEYCIQDVmal6r4YwWZnRFAhkxtBuhC9DkI8edAE3TDtWeATI8QIhANxiG29sGfPL9neccap5pApPdpGNw7HUrcg2f/plSQaL"}, "inclusionProof": {"logIndex": "46765694", "rootHash": "tHDnjyWM1D0S/LMxPKpbA2ARX0nDJAIaiSJkEfAUt80=", "treeSize": "46765695", "hashes": ["MbM4b1IdzMcxrM0M3G0WRC6T9I04Nb9U2Ndsw9Iu8Kg=", "reCjGqzdYRJnPDpm1ah+58Nk8fWzbdDcnQRY4aLgnac=", "ffOkE+U7rrMFDm2qwCD3MfwiTo2njwK9PY4QIryK4yU=", "vfQF1SCq0+eofmO26+YjbYtOmw9myoV+5CV4JF4ZcL0=", "nhUF67tgV9eCOCZ/5rpk46g6Um0PL25g3oTmMl/VkpA=", "SkkhuNxwaCK56utv2d4O0v1RFIcnU5lTVMq89IZtWaE=", "5S8IyLnwlAhLZBEUNH1SaLO2dckc8NKwnGVgAO+3QQI=", "3onlfMyeVMDSIvH0BhkTTMYIWUuOZa+vitTl74eA7yo=", "TgYmpZ2JTTWko4kWZxTIAYkJpJpeOjVCg6ICKYnUS+8=", "PAMmlBIG22MGowjyiChYp5iB6NiTRa0xKI2vnvpExek=", "NS61TOUCaTiUJotPDnr7bTP/1ogKsWSnbgDlk1uvGzM=", "MvEBWaRrd43Pq04mjOFzGW9RiqBSzMBfuFXKBIVtQnc=", "Zse3BPkR/cJv62LvVuiDH+EpgIE5v3V3qXdG8HQFf1A=", "jU9+tgjTIKUYGeU7T7RjqyL+F+gFV9tCdwX2GZ1UtQs=", "vemyaMj0Na1LMjbB/9Dmkq8T+jAb3o+yCESgAayUABU="], "checkpoint": {"envelope": "rekor.sigstore.dev - 1193050959916656506\n46765695\ntHDnjyWM1D0S/LMxPKpbA2ARX0nDJAIaiSJkEfAUt80=\n\n\u2014 rekor.sigstore.dev wNI9ajBFAiEAuCYs8aQChh+nY0StyUwt2eomG176aNsYT003B5N0Z90CIFtuoa7y2G4hHRVQx+lqO60qXMe4RzklsY59A1S70VZP\n"}}, "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI3MjIwODM1ZDlmOTBiMzdjMDA2ZTk4NDJhOGRmZjQ1ODBhYWNhNDMxODY3NGY5NDczMDJiOGQyOGYzZjgxMTEyIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNPL2ozUHRyK1QwQU4yVHZMdlpXaVdpSHdmWno2ZDhoaXNWcXpBcWd3SlRRSWdTb1RpSGpScjlWeXN0YW5OTUtCYUhVZnIzUnkxdGovck1UMVFjVVlGTndvPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVTjZSRU5EUVd4SFowRjNTVUpCWjBsVlVsUlZabGhTZG5GSWFtMUVjbFZoU0dzclJtVjBUV0V2ZVZWSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFZkMDFxUVRCTlZHY3dUa1JKTVZkb1kwNU5hbFYzVFdwQk1FMVVaekZPUkVreFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZTZHpSRk9EaFBSU3RMYTJFeFpFODFORU5NY0VWeVZWVTJabVJzZDAxa05rTm9kVXdLT1hKWWRIVTRhM0U0ZUVNMloySk9hbk5XY1U0eFlrWkNaRVJ6VW1VNEswVndVRGRXVkRkVU1GZzNiM1J2T1RCNFlqWlBRMEZZUVhkblowWnpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZPUjFoWUNqTkhUM28zUTFoeFVrRlFSME53YlZkVVkwOTFSV0pGZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDBoM1dVUldVakJTUVZGSUwwSkNWWGRGTkVWU1pFZG9kbUpYUm5wUlNFSTFaRWRvZG1KcE5YWmpiV04zUzFGWlMwdDNXVUpDUVVkRWRucEJRZ3BCVVZGaVlVaFNNR05JVFRaTWVUbG9XVEpPZG1SWE5UQmplVFZ1WWpJNWJtSkhWWFZaTWpsMFRVTnpSME5wYzBkQlVWRkNaemM0ZDBGUlowVklVWGRpQ21GSVVqQmpTRTAyVEhrNWFGa3lUblprVnpVd1kzazFibUl5T1c1aVIxVjFXVEk1ZEUxSlIweENaMjl5UW1kRlJVRmtXalZCWjFGRFFrZ3dSV1YzUWpVS1FVaGpRVE5VTUhkaGMySklSVlJLYWtkU05HTnRWMk16UVhGS1MxaHlhbVZRU3pNdmFEUndlV2RET0hBM2J6UkJRVUZIVlRCclkycDNRVUZCUWtGTlFRcFRSRUpIUVdsRlFUZzRkemxSWWs1elpFcHJjbXhpWTBwU1JHWkVZelY2VGpOTk9XbGFWSGtyUms5RmJWZEdOR3hzZUZsRFNWRkVVVTlOYjB4MmVVbzFDbVZ3UkRoaWFsQTBXa3AwYTJGM2MzSkpUbWRzUzI5VVdtSk9WRloxYTJRM1NXcEJTMEpuWjNGb2EycFBVRkZSUkVGM1RuQkJSRUp0UVdwRlFXcDZRVVVLUmtZMFVGWTNWRXRWV2xCMGMwVm5OWFpRYkVKeFZFWTJWRTA1ZUdSdWJWZzRVbEJZVkZoa1JIY3JWV3BvU3pFMlkycG5ZbU15VUZkaU5DOTRRV3BGUVFvMFNHZEJhemhrZUVWNWR6Um1hV3hhTjJFM1RUaFlTbUphU1ZnMVEwNXNjMFU0VDBGNk1XZFdRMkowYkhoWmRqbENia1l3VWpGSFVHNWFkalp3U25KTkNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}], "timestampVerificationData": {}}, "messageSignature": {"messageDigest": {"algorithm": "SHA2_256", "digest": "ciCDXZ+Qs3wAbphCqN/0WAqspDGGdPlHMCuNKPP4ERI="}, "signature": "MEUCIQCO/j3Ptr+T0AN2TvLvZWiWiHwfZz6d8hisVqzAqgwJTQIgSoTiHjRr9VystanNMKBaHUfr3Ry1tj/rMT1QcUYFNwo="}} diff --git a/bpo-31046_ensurepip_honours_prefix.patch b/bpo-31046_ensurepip_honours_prefix.patch index 4faebdb..0459cf5 100644 --- a/bpo-31046_ensurepip_honours_prefix.patch +++ b/bpo-31046_ensurepip_honours_prefix.patch @@ -5,30 +5,32 @@ Subject: [PATCH] bpo-31046: ensurepip does not honour the value of $(prefix) Co-Authored-By: Xavier de Gaye --- - Doc/library/ensurepip.rst | 9 +++-- + Doc/library/ensurepip.rst | 12 +++++- Lib/ensurepip/__init__.py | 18 +++++++--- Lib/test/test_ensurepip.py | 11 ++++++ Makefile.pre.in | 4 +- Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst | 1 - 5 files changed, 34 insertions(+), 9 deletions(-) + 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst -Index: Python-3.12.4/Doc/library/ensurepip.rst +Index: Python-3.12.10/Doc/library/ensurepip.rst =================================================================== ---- Python-3.12.4.orig/Doc/library/ensurepip.rst -+++ Python-3.12.4/Doc/library/ensurepip.rst -@@ -59,8 +59,9 @@ is at least as recent as the one availab +--- Python-3.12.10.orig/Doc/library/ensurepip.rst 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/library/ensurepip.rst 2025-04-11 21:16:06.140273604 +0200 +@@ -61,7 +61,11 @@ By default, ``pip`` is installed into the current virtual environment (if one is active) or into the system site packages (if there is no active virtual environment). The installation location can be controlled -through two additional command line options: +through some additional command line options: ++ ++.. option:: --prefix ++ ++ Installs ``pip`` using the given directory prefix. -+* ``--prefix ``: Installs ``pip`` using the given directory prefix. - * :samp:`--root {dir}`: Installs ``pip`` relative to the given root directory - rather than the root of the currently active virtual environment (if any) - or the default root for the current Python installation. -@@ -92,7 +93,7 @@ Module API + .. option:: --root + +@@ -102,7 +106,7 @@ Returns a string specifying the available version of pip that will be installed when bootstrapping an environment. @@ -37,7 +39,7 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst altinstall=False, default_pip=False, \ verbosity=0) -@@ -102,6 +103,8 @@ Module API +@@ -112,6 +116,8 @@ If *root* is ``None``, then installation uses the default install location for the current environment. @@ -46,7 +48,7 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst *upgrade* indicates whether or not to upgrade an existing installation of an earlier version of ``pip`` to the available version. -@@ -122,6 +125,8 @@ Module API +@@ -132,6 +138,8 @@ *verbosity* controls the level of output to :data:`sys.stdout` from the bootstrapping operation. @@ -55,11 +57,11 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst .. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap .. note:: -Index: Python-3.12.4/Lib/ensurepip/__init__.py +Index: Python-3.12.10/Lib/ensurepip/__init__.py =================================================================== ---- Python-3.12.4.orig/Lib/ensurepip/__init__.py -+++ Python-3.12.4/Lib/ensurepip/__init__.py -@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings( +--- Python-3.12.10.orig/Lib/ensurepip/__init__.py 2025-04-11 21:04:42.789443156 +0200 ++++ Python-3.12.10/Lib/ensurepip/__init__.py 2025-04-11 21:13:01.303399067 +0200 +@@ -120,27 +120,27 @@ os.environ['PIP_CONFIG_FILE'] = os.devnull @@ -92,7 +94,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py Note that calling this function will alter both sys.path and os.environ. """ -@@ -190,6 +190,8 @@ def _bootstrap(*, root=None, upgrade=Fal +@@ -190,6 +190,8 @@ args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir] if root: args += ["--root", root] @@ -101,7 +103,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py if upgrade: args += ["--upgrade"] if user: -@@ -265,6 +267,11 @@ def _main(argv=None): +@@ -265,6 +267,11 @@ help="Install everything relative to this alternate root directory.", ) parser.add_argument( @@ -113,7 +115,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py "--altinstall", action="store_true", default=False, -@@ -283,6 +290,7 @@ def _main(argv=None): +@@ -283,6 +290,7 @@ return _bootstrap( root=args.root, @@ -121,11 +123,11 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py upgrade=args.upgrade, user=args.user, verbosity=args.verbosity, -Index: Python-3.12.4/Lib/test/test_ensurepip.py +Index: Python-3.12.10/Lib/test/test_ensurepip.py =================================================================== ---- Python-3.12.4.orig/Lib/test/test_ensurepip.py -+++ Python-3.12.4/Lib/test/test_ensurepip.py -@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit +--- Python-3.12.10.orig/Lib/test/test_ensurepip.py 2025-04-11 21:04:44.274413027 +0200 ++++ Python-3.12.10/Lib/test/test_ensurepip.py 2025-04-11 21:13:01.303691075 +0200 +@@ -105,6 +105,17 @@ unittest.mock.ANY, ) @@ -143,11 +145,11 @@ Index: Python-3.12.4/Lib/test/test_ensurepip.py def test_bootstrapping_with_user(self): ensurepip.bootstrap(user=True) -Index: Python-3.12.4/Makefile.pre.in +Index: Python-3.12.10/Makefile.pre.in =================================================================== ---- Python-3.12.4.orig/Makefile.pre.in -+++ Python-3.12.4/Makefile.pre.in -@@ -1914,7 +1914,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni +--- Python-3.12.10.orig/Makefile.pre.in 2025-04-11 21:04:58.388346212 +0200 ++++ Python-3.12.10/Makefile.pre.in 2025-04-11 21:13:01.304095180 +0200 +@@ -1914,7 +1914,7 @@ install|*) ensurepip="" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ @@ -156,7 +158,7 @@ Index: Python-3.12.4/Makefile.pre.in fi .PHONY: altinstall -@@ -1925,7 +1925,7 @@ altinstall: commoninstall +@@ -1925,7 +1925,7 @@ install|*) ensurepip="--altinstall" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ @@ -165,9 +167,9 @@ Index: Python-3.12.4/Makefile.pre.in fi .PHONY: commoninstall -Index: Python-3.12.4/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst +Index: Python-3.12.10/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst =================================================================== ---- /dev/null -+++ Python-3.12.4/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ Python-3.12.10/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-04-11 21:13:01.304672632 +0200 @@ -0,0 +1 @@ +A directory prefix can now be specified when using :mod:`ensurepip`. diff --git a/doc-py38-to-py36.patch b/doc-py38-to-py36.patch index b3ba20f..0ad76f7 100644 --- a/doc-py38-to-py36.patch +++ b/doc-py38-to-py36.patch @@ -11,9 +11,11 @@ Doc/tools/extensions/patchlevel.py | 9 ++--- 10 files changed, 100 insertions(+), 84 deletions(-) ---- a/Doc/Makefile -+++ b/Doc/Makefile -@@ -14,15 +14,15 @@ PAPER = +Index: Python-3.12.10/Doc/Makefile +=================================================================== +--- Python-3.12.10.orig/Doc/Makefile 2025-04-11 21:04:46.171424996 +0200 ++++ Python-3.12.10/Doc/Makefile 2025-04-11 21:18:23.184451081 +0200 +@@ -14,15 +14,15 @@ SOURCES = DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py) REQUIREMENTS = requirements.txt @@ -33,27 +35,29 @@ $(PAPEROPT_$(PAPER)) \ $(SPHINXOPTS) $(SPHINXERRORHANDLING) \ . build/$(BUILDER) $(SOURCES) ---- a/Doc/conf.py -+++ b/Doc/conf.py -@@ -10,6 +10,8 @@ import importlib - import os - import sys +Index: Python-3.12.10/Doc/conf.py +=================================================================== +--- Python-3.12.10.orig/Doc/conf.py 2025-04-11 21:04:42.254653936 +0200 ++++ Python-3.12.10/Doc/conf.py 2025-04-11 21:18:44.605665782 +0200 +@@ -11,6 +11,8 @@ + from importlib import import_module + from importlib.util import find_spec +from sphinx import version_info + # Make our custom extensions available to Sphinx sys.path.append(os.path.abspath('tools/extensions')) sys.path.append(os.path.abspath('includes')) -@@ -82,7 +84,7 @@ highlight_language = 'python3' +@@ -87,7 +89,7 @@ # Minimum version of sphinx required # Keep this version in sync with ``Doc/requirements.txt``. --needs_sphinx = '8.1.3' +-needs_sphinx = '8.2.0' +needs_sphinx = '4.2.0' # Create table of contents entries for domain objects (e.g. functions, classes, # attributes, etc.). Default is True. -@@ -337,7 +339,7 @@ html_short_title = f'{release} Documenta +@@ -342,7 +344,7 @@ # (See .readthedocs.yml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html) is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external" repository_url = os.getenv("READTHEDOCS_GIT_CLONE_URL", "") @@ -62,7 +66,7 @@ html_context = { "is_deployment_preview": is_deployment_preview, "repository_url": repository_url or None, -@@ -583,6 +585,16 @@ extlinks = { +@@ -588,6 +590,16 @@ } extlinks_detect_hardcoded_links = True @@ -79,9 +83,11 @@ # Options for c_annotations extension # ----------------------------------- ---- a/Doc/tools/check-warnings.py -+++ b/Doc/tools/check-warnings.py -@@ -228,7 +228,8 @@ def fail_if_regression( +Index: Python-3.12.10/Doc/tools/check-warnings.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/check-warnings.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/check-warnings.py 2025-04-11 21:18:23.185204047 +0200 +@@ -228,7 +228,8 @@ print(filename) for warning in warnings: if filename in warning: @@ -91,7 +97,7 @@ print(" {line}: {msg}".format_map(match)) return -1 return 0 -@@ -316,7 +317,7 @@ def main(argv: list[str] | None = None) +@@ -316,7 +317,7 @@ cwd = str(Path.cwd()) + os.path.sep files_with_nits = { @@ -100,8 +106,10 @@ for warning in warnings if "Doc/" in warning } ---- a/Doc/tools/extensions/audit_events.py -+++ b/Doc/tools/extensions/audit_events.py +Index: Python-3.12.10/Doc/tools/extensions/audit_events.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/audit_events.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/audit_events.py 2025-04-11 21:18:23.185493402 +0200 @@ -1,9 +1,6 @@ """Support for documenting audit events.""" @@ -112,7 +120,7 @@ from docutils import nodes from sphinx.errors import NoUri -@@ -12,12 +9,11 @@ from sphinx.transforms.post_transforms i +@@ -12,12 +9,11 @@ from sphinx.util import logging from sphinx.util.docutils import SphinxDirective @@ -129,7 +137,7 @@ logger = logging.getLogger(__name__) -@@ -32,16 +28,16 @@ _SYNONYMS = [ +@@ -32,16 +28,16 @@ class AuditEvents: def __init__(self) -> None: @@ -150,7 +158,7 @@ ) -> None: if name in self.events: self._check_args_match(name, args) -@@ -49,7 +45,7 @@ class AuditEvents: +@@ -49,7 +45,7 @@ self.events[name] = args self.sources.setdefault(name, []).append(source) @@ -159,7 +167,7 @@ current_args = self.events[name] msg = ( f"Mismatched arguments for audit-event {name}: " -@@ -60,7 +56,7 @@ class AuditEvents: +@@ -60,7 +56,7 @@ if len(current_args) != len(args): logger.warning(msg) return @@ -168,7 +176,7 @@ if a1 == a2: continue if any(a1 in s and a2 in s for s in _SYNONYMS): -@@ -73,7 +69,7 @@ class AuditEvents: +@@ -73,7 +69,7 @@ name_clean = re.sub(r"\W", "_", name) return f"audit_event_{name_clean}_{source_count}" @@ -177,7 +185,7 @@ for name in sorted(self.events.keys()): yield name, self.events[name], self.sources[name] -@@ -97,7 +93,7 @@ def audit_events_purge( +@@ -97,7 +93,7 @@ def audit_events_merge( app: Sphinx, env: BuildEnvironment, @@ -186,7 +194,7 @@ other: BuildEnvironment, ) -> None: """In Sphinx parallel builds, this merges audit_events from subprocesses.""" -@@ -126,14 +122,16 @@ class AuditEvent(SphinxDirective): +@@ -126,14 +122,16 @@ ), ] @@ -209,7 +217,7 @@ else: args = [] ids = [] -@@ -169,7 +167,7 @@ class audit_event_list(nodes.General, no +@@ -169,7 +167,7 @@ class AuditEventListDirective(SphinxDirective): @@ -218,7 +226,7 @@ return [audit_event_list()] -@@ -181,7 +179,11 @@ class AuditEventListTransform(SphinxPost +@@ -181,7 +179,11 @@ return table = self._make_table(self.app.builder, self.env.docname) @@ -231,7 +239,7 @@ node.replace_self(table) def _make_table(self, builder: Builder, docname: str) -> nodes.table: -@@ -217,8 +219,8 @@ class AuditEventListTransform(SphinxPost +@@ -217,8 +219,8 @@ builder: Builder, docname: str, name: str, @@ -242,8 +250,10 @@ ) -> nodes.row: row = nodes.row() name_node = nodes.paragraph("", nodes.Text(name)) ---- a/Doc/tools/extensions/availability.py -+++ b/Doc/tools/extensions/availability.py +Index: Python-3.12.10/Doc/tools/extensions/availability.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/availability.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/availability.py 2025-04-11 21:18:23.185756636 +0200 @@ -1,8 +1,6 @@ """Support for documenting platform availability""" @@ -254,7 +264,7 @@ from docutils import nodes from sphinx import addnodes -@@ -53,7 +51,7 @@ class Availability(SphinxDirective): +@@ -53,7 +51,7 @@ optional_arguments = 0 final_argument_whitespace = True @@ -263,7 +273,7 @@ title = sphinx_gettext("Availability") refnode = addnodes.pending_xref( title, -@@ -77,7 +75,7 @@ class Availability(SphinxDirective): +@@ -77,7 +75,7 @@ return [cnode] @@ -272,7 +282,7 @@ """Parse platform information from arguments Arguments is a comma-separated string of platforms. A platform may -@@ -96,12 +94,13 @@ class Availability(SphinxDirective): +@@ -96,12 +94,13 @@ platform, _, version = arg.partition(" >= ") if platform.startswith("not "): version = False @@ -288,7 +298,7 @@ logger.warning( "Unknown platform%s or syntax '%s' in '.. availability:: %s', " "see %s:KNOWN_PLATFORMS for a set of known platforms.", -@@ -114,7 +113,7 @@ class Availability(SphinxDirective): +@@ -114,7 +113,7 @@ return platforms @@ -297,9 +307,11 @@ app.add_directive("availability", Availability) return { ---- a/Doc/tools/extensions/c_annotations.py -+++ b/Doc/tools/extensions/c_annotations.py -@@ -9,22 +9,18 @@ Configuration: +Index: Python-3.12.10/Doc/tools/extensions/c_annotations.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/c_annotations.py 2025-04-11 21:16:39.007011463 +0200 ++++ Python-3.12.10/Doc/tools/extensions/c_annotations.py 2025-04-11 21:18:23.185953242 +0200 +@@ -9,22 +9,18 @@ * Set ``stable_abi_file`` to the path to stable ABI list. """ @@ -325,7 +337,7 @@ ROLE_TO_OBJECT_TYPE = { "func": "function", -@@ -35,20 +31,20 @@ ROLE_TO_OBJECT_TYPE = { +@@ -35,20 +31,20 @@ } @@ -350,7 +362,7 @@ class StableABIEntry: # Role of the object. # Source: Each [item_kind] in stable_abi.toml is mapped to a C Domain role. -@@ -67,7 +63,7 @@ class StableABIEntry: +@@ -67,7 +63,7 @@ struct_abi_kind: str @@ -359,7 +371,7 @@ refcount_data = {} refcounts = refcount_filename.read_text(encoding="utf8") for line in refcounts.splitlines(): -@@ -103,7 +99,7 @@ def read_refcount_data(refcount_filename +@@ -103,7 +99,7 @@ return refcount_data @@ -368,7 +380,7 @@ stable_abi_data = {} with open(stable_abi_file, encoding="utf8") as fp: for record in csv.DictReader(fp): -@@ -127,11 +123,14 @@ def add_annotations(app: Sphinx, doctree +@@ -127,11 +123,14 @@ continue if not par[0].get("ids", None): continue @@ -385,7 +397,7 @@ if ROLE_TO_OBJECT_TYPE[record.role] != objtype: msg = ( f"Object type mismatch in limited API annotation for {name}: " -@@ -238,7 +237,7 @@ def _unstable_api_annotation() -> nodes. +@@ -238,7 +237,7 @@ ) @@ -394,7 +406,7 @@ classes = ["refcount"] if result_refs is None: rc = sphinx_gettext("Return value: Always NULL.") -@@ -258,7 +257,7 @@ class LimitedAPIList(SphinxDirective): +@@ -258,7 +257,7 @@ optional_arguments = 0 final_argument_whitespace = True @@ -403,7 +415,7 @@ state = self.env.domaindata["c_annotations"] content = [ f"* :c:{record.role}:`{record.name}`" -@@ -281,13 +280,23 @@ def init_annotations(app: Sphinx) -> Non +@@ -281,13 +280,23 @@ ) @@ -428,8 +440,10 @@ return { "version": "1.0", "parallel_read_safe": True, ---- a/Doc/tools/extensions/changes.py -+++ b/Doc/tools/extensions/changes.py +Index: Python-3.12.10/Doc/tools/extensions/changes.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/changes.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/changes.py 2025-04-11 21:18:23.186150755 +0200 @@ -1,7 +1,5 @@ """Support for documenting version of changes, additions, deprecations.""" @@ -438,7 +452,7 @@ from typing import TYPE_CHECKING from sphinx.domains.changeset import ( -@@ -25,7 +23,7 @@ def expand_version_arg(argument: str, re +@@ -25,7 +23,7 @@ class PyVersionChange(VersionChange): @@ -447,7 +461,7 @@ # Replace the 'next' special token with the current development version self.arguments[0] = expand_version_arg( self.arguments[0], self.config.release -@@ -43,7 +41,7 @@ class DeprecatedRemoved(VersionChange): +@@ -43,7 +41,7 @@ "Deprecated since version %s, removed in version %s" ) @@ -456,7 +470,7 @@ # Replace the first two arguments (deprecated version and removed version) # with a single tuple of both versions. version_deprecated = expand_version_arg( -@@ -73,7 +71,7 @@ class DeprecatedRemoved(VersionChange): +@@ -73,7 +71,7 @@ versionlabel_classes[self.name] = "" @@ -465,8 +479,10 @@ # Override Sphinx's directives with support for 'next' app.add_directive("versionadded", PyVersionChange, override=True) app.add_directive("versionchanged", PyVersionChange, override=True) ---- a/Doc/tools/extensions/glossary_search.py -+++ b/Doc/tools/extensions/glossary_search.py +Index: Python-3.12.10/Doc/tools/extensions/glossary_search.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/glossary_search.py 2025-04-11 21:16:39.007340209 +0200 ++++ Python-3.12.10/Doc/tools/extensions/glossary_search.py 2025-04-11 21:18:23.186307620 +0200 @@ -1,18 +1,14 @@ """Feature search results for glossary items prominently.""" @@ -488,7 +504,7 @@ logger = logging.getLogger(__name__) -@@ -60,7 +56,7 @@ def write_glossary_json(app: Sphinx, _ex +@@ -60,7 +56,7 @@ dest.write_text(json.dumps(app.env.glossary_terms), encoding='utf-8') @@ -497,8 +513,10 @@ app.connect('doctree-resolved', process_glossary_nodes) app.connect('build-finished', write_glossary_json) ---- a/Doc/tools/extensions/misc_news.py -+++ b/Doc/tools/extensions/misc_news.py +Index: Python-3.12.10/Doc/tools/extensions/misc_news.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/misc_news.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/misc_news.py 2025-04-11 21:18:23.186501571 +0200 @@ -1,7 +1,5 @@ """Support for including Misc/NEWS.""" @@ -507,7 +525,7 @@ import re from pathlib import Path from typing import TYPE_CHECKING -@@ -24,13 +22,13 @@ Python News +@@ -24,13 +22,13 @@ +++++++++++ """ @@ -524,7 +542,7 @@ r"^what's new in (.*?)\??$", re.ASCII | re.IGNORECASE | re.MULTILINE ) -@@ -42,7 +40,7 @@ class MiscNews(SphinxDirective): +@@ -42,7 +40,7 @@ final_argument_whitespace = False option_spec = {} @@ -533,7 +551,7 @@ # Get content of NEWS file source, _ = self.get_source_info() news_file = Path(source).resolve().parent / self.arguments[0] -@@ -54,7 +52,7 @@ class MiscNews(SphinxDirective): +@@ -54,7 +52,7 @@ return [nodes.strong(text, text)] # remove first 3 lines as they are the main heading @@ -542,7 +560,7 @@ news_text = bpo_issue_re.sub(r":issue:`\1`", news_text) # Fallback handling for GitHub issues -@@ -65,7 +63,7 @@ class MiscNews(SphinxDirective): +@@ -65,7 +63,7 @@ return [] @@ -551,8 +569,10 @@ app.add_directive("miscnews", MiscNews) return { ---- a/Doc/tools/extensions/patchlevel.py -+++ b/Doc/tools/extensions/patchlevel.py +Index: Python-3.12.10/Doc/tools/extensions/patchlevel.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/patchlevel.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/patchlevel.py 2025-04-11 21:18:23.186669122 +0200 @@ -3,7 +3,7 @@ import re import sys @@ -562,7 +582,7 @@ CPYTHON_ROOT = Path( __file__, # cpython/Doc/tools/extensions/patchlevel.py -@@ -26,7 +26,7 @@ class version_info(NamedTuple): # noqa: +@@ -26,7 +26,7 @@ major: int #: Major release number minor: int #: Minor release number micro: int #: Patch release number @@ -571,7 +591,7 @@ serial: int #: Serial release number -@@ -37,7 +37,8 @@ def get_header_version_info() -> version +@@ -37,7 +37,8 @@ defines = {} patchlevel_h = PATCHLEVEL_H.read_text(encoding="utf-8") for line in patchlevel_h.splitlines(): @@ -581,7 +601,7 @@ name, value = m.groups() defines[name] = value -@@ -50,7 +51,7 @@ def get_header_version_info() -> version +@@ -50,7 +51,7 @@ ) diff --git a/docs-docutils_014-Sphinx_420.patch b/docs-docutils_014-Sphinx_420.patch index 2ef9053..664d553 100644 --- a/docs-docutils_014-Sphinx_420.patch +++ b/docs-docutils_014-Sphinx_420.patch @@ -1,12 +1,13 @@ --- Doc/tools/extensions/c_annotations.py | 6 +++++- Doc/tools/extensions/glossary_search.py | 12 ++++++++++-- - Doc/tools/extensions/pyspecific.py | 5 ++++- - 3 files changed, 19 insertions(+), 4 deletions(-) + 2 files changed, 15 insertions(+), 3 deletions(-) ---- a/Doc/tools/extensions/c_annotations.py -+++ b/Doc/tools/extensions/c_annotations.py -@@ -117,7 +117,11 @@ def add_annotations(app: Sphinx, doctree +Index: Python-3.12.10/Doc/tools/extensions/c_annotations.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/c_annotations.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/c_annotations.py 2025-04-11 21:16:39.007011463 +0200 +@@ -117,7 +117,11 @@ state = app.env.domaindata["c_annotations"] refcount_data = state["refcount_data"] stable_abi_data = state["stable_abi_data"] @@ -19,9 +20,11 @@ par = node.parent if par["domain"] != "c": continue ---- a/Doc/tools/extensions/glossary_search.py -+++ b/Doc/tools/extensions/glossary_search.py -@@ -30,8 +30,16 @@ def process_glossary_nodes( +Index: Python-3.12.10/Doc/tools/extensions/glossary_search.py +=================================================================== +--- Python-3.12.10.orig/Doc/tools/extensions/glossary_search.py 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/tools/extensions/glossary_search.py 2025-04-11 21:16:39.007340209 +0200 +@@ -30,8 +30,16 @@ else: terms = app.env.glossary_terms = {} @@ -40,17 +43,3 @@ term = glossary_item[0].astext() definition = glossary_item[-1] ---- a/Doc/tools/extensions/pyspecific.py -+++ b/Doc/tools/extensions/pyspecific.py -@@ -25,7 +25,10 @@ from sphinx.domains.python import PyFunc - from sphinx.locale import _ as sphinx_gettext - from sphinx.util.docutils import SphinxDirective - from sphinx.writers.text import TextWriter, TextTranslator --from sphinx.util.display import status_iterator -+try: -+ from sphinx.util.display import status_iterator -+except ModuleNotFoundError: -+ from sphinx.util import status_iterator - - - ISSUE_URI = 'https://bugs.python.org/issue?@action=redirect&bpo=%s' diff --git a/fix_configure_rst.patch b/fix_configure_rst.patch index 19cd4f9..836b0f5 100644 --- a/fix_configure_rst.patch +++ b/fix_configure_rst.patch @@ -3,9 +3,11 @@ Misc/NEWS | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) ---- a/Doc/using/configure.rst -+++ b/Doc/using/configure.rst -@@ -640,13 +640,11 @@ macOS Options +Index: Python-3.12.10/Doc/using/configure.rst +=================================================================== +--- Python-3.12.10.orig/Doc/using/configure.rst 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Doc/using/configure.rst 2025-04-11 21:16:27.319169087 +0200 +@@ -640,13 +640,11 @@ See ``Mac/README.rst``. @@ -19,9 +21,11 @@ .. option:: --enable-framework=INSTALLDIR Create a Python.framework rather than a traditional Unix install. Optional ---- a/Misc/NEWS -+++ b/Misc/NEWS -@@ -14838,7 +14838,7 @@ C API +Index: Python-3.12.10/Misc/NEWS +=================================================================== +--- Python-3.12.10.orig/Misc/NEWS 2025-04-08 13:35:47.000000000 +0200 ++++ Python-3.12.10/Misc/NEWS 2025-04-11 21:16:27.326169052 +0200 +@@ -15106,7 +15106,7 @@ - bpo-40939: Removed documentation for the removed ``PyParser_*`` C API. - bpo-43795: The list in :ref:`limited-api-list` now shows the public name diff --git a/python312.changes b/python312.changes index e0b69de..6482f07 100644 --- a/python312.changes +++ b/python312.changes @@ -1,3 +1,169 @@ +------------------------------------------------------------------- +Fri Apr 11 19:22:06 UTC 2025 - Matej Cepl + +- Update to 3.12.10: + - gh-131852: msgfmt no longer adds the POT-Creation-Date to + generated .mo files for consistency with GNU msgfmt. + - gh-85012: Correctly reset msgctxt when compiling messages in + msgfmt. + - gh-131050: test_ssl.test_dh_params is skipped if the + underlying TLS library does not support finite-field + ephemeral Diffie-Hellman. + - gh-119727: Add --single-process command line option to Python + test runner (regrtest). Patch by Victor Stinner. + - gh-131809: Update bundled libexpat to 2.7.1 + - gh-131261: Upgrade to libexpat 2.7.0 + - gh-127371: Avoid unbounded buffering for + tempfile.SpooledTemporaryFile.writelines(). Previously, disk + spillover was only checked after the lines iterator had been + exhausted. This is now done after each line is written. + - gh-121284: Fix bug in the folding of rfc2047 encoded-words + when flattening an email message using a modern email + policy. Previously when an encoded-word was too long for + a line, it would be decoded, split across lines, and + re-encoded. But commas and other special characters in the + original text could be left unencoded and unquoted. This + could theoretically be used to spoof header lines using a + carefully constructed encoded-word if the resulting rendered + email was transmitted or re-parsed. + - gh-116608: undeprecate functional API for importlib.resources + - gh-132075: Fix possible use of socket address structures + with uninitialized members. Now all structure members are + initialized with zeroes by default. + - gh-132002: Fix crash when deallocating contextvars.ContextVar + with weird unahashable string names. + - gh-131668: socket: Fix code parsing AF_BLUETOOTH socket + addresses. + - gh-131492: Fix a resource leak when constructing a + gzip.GzipFile with a filename fails, for example when passing + an invalid compresslevel. + - gh-131325: Fix sendfile fallback implementation to drain data + after writing to transport in asyncio. + - gh-129843: Fix incorrect argument passing in + warnings.warn_explicit(). + - gh-131204: Use monospace font from System Font Stack for + cross-platform support in difflib.HtmlDiff. + - gh-131045: Fix issue with __contains__, values, and + pseudo-members for enum.Flag. + - gh-130959: Fix pure-Python implementation of + datetime.time.fromisoformat() to reject times with spaces in + fractional part (for example, 12:34:56.400 +02:00), matching + the C implementation. Patch by Michał Gorny. + - gh-130637: Add validation for numeric response data in + poplib.POP3.stat() method + - gh-130461: Remove .. index:: directives from the uuid module + documentation. These directives previously created entries + in the general index for getnode() as well as the uuid1(), + uuid3(), uuid4(), and uuid5() constructor functions. + - gh-130285: Fix corner case for random.sample() allowing the + counts parameter to specify an empty population. So now, + sample([], 0, counts=[]) and sample('abc', k=0, counts=[0, 0, + 0]) both give the same result as sample([], 0). + - gh-130250: Fix regression in traceback.print_last(). + - gh-118761: Reverts a change in the previous release + attempting to make some stdlib imports used within the + subprocess module lazy as this was causing errors during + __del__ finalizers calling methods such as terminate, or + kill, or send_signal. + - gh-130164: Fixed failure to raise TypeError in + inspect.Signature.bind() for positional-only arguments + provided by keyword when a variadic keyword argument (e.g. + **kwargs) is present. + - gh-130151: Fix reference leaks in _hashlib.hmac_new() and + _hashlib.hmac_digest(). Patch by Bénédikt Tran. + - gh-129726: Fix gzip.GzipFile raising an unraisable exception + during garbage collection when referring to a temporary + object by breaking the reference loop with weakref. + - gh-129583: Update bundled pip to 25.0.1 + - gh-97850: Update the deprecation warning of + importlib.abc.Loader.load_module(). + - gh-129603: Fix bugs where sqlite3.Row objects could segfault + if their inherited description was set to None. Patch by + Erlend Aasland. + - gh-117779: Fix reading duplicated entries in zipfile by + name. Reading duplicated entries (except the last one) by + ZipInfo now emits a warning instead of raising an exception. + - gh-128772: Fix pydoc for methods with the __module__ + attribute equal to None. + - gh-92897: Scheduled the deprecation of the check_home + argument of sysconfig.is_python_build() to Python 3.15. + - gh-128703: Fix mimetypes.guess_type() to use default mapping + for empty Content-Type in registry. + - gh-126037: xml.etree.ElementTree: Fix a crash in + Element.find, Element.findtext and Element.findall when + the tag to find implements an __eq__() method mutating the + element being queried. Patch by Bénédikt Tran. + - gh-127712: Fix handling of the secure argument of + logging.handlers.SMTPHandler. + - gh-126033: xml.etree.ElementTree: Fix a crash in + Element.remove when the element is concurrently + mutated. Patch by Bénédikt Tran. + - gh-125553: Fix round-trip invariance for backslash + continuations in tokenize.untokenize(). + - gh-101137: Mime type text/x-rst is now supported by + mimetypes. + - gh-113238: Add Anchor to importlib.resources (in order for + the code to comply with the documentation) + - gh-89039: When replace() method is called on a subclass + of datetime, date or time, properly call derived + constructor. Previously, only the base class’s constructor + was called. + - Also, make sure to pass non-zero fold values when creating + subclasses in various methods. Previously, fold was silently + ignored. + - gh-129873: Simplify displaying the IDLE doc by only copying + the text section of idle.html to idlelib/help.html. Patch by + Stan Ulbrych. + - gh-131417: Mention asyncio.Future and asyncio.Task in generic + classes list. + - gh-125722: Require Sphinx 8.2.0 or later to build the Python + documentation. Patch by Adam Turner. + - gh-129712: The wheel tags supported by each macOS universal + SDK option are now documented. + - gh-46236: C API: Document PyUnicode_RSplit(), + PyUnicode_Partition() and PyUnicode_RPartition(). + - gh-131670: Fix anext() failing on sync __anext__() raising an + exception. + - gh-130809: Fixed an issue where _PyFrame_LocalsToFast tries + to write module level values to hidden fasts. + - gh-130775: Do not crash on negative column and end_column in + ast locations. + - gh-130618: Fix a bug that was causing UnicodeDecodeError or + SystemError to be raised when using f-strings with lambda + expressions with non-ASCII characters. Patch by Pablo Galindo + - gh-130163: Fix possible crashes related to concurrent change + and use of the sys module attributes. + - gh-88887: Fixing multiprocessing Resource Tracker process + leaking, usually observed when running Python as PID 1. + - gh-116042: Fix location for SyntaxErrors of invalid escapes + in the tokenizer. Patch by Pablo Galindo + - gh-128632: Disallow __classdict__ as the name of a type + parameter. Using this name would previously crash the + interpreter in some circumstances. + - gh-125331: from __future__ import barry_as_FLUFL now works in + more contexts, including when it is used in files, with the + -c flag, and in the REPL when there are multiple statements + on the same line. Previously, it worked only on subsequent + lines in the REPL, and when the appropriate flags were passed + directly to compile(). Patch by Pablo Galindo. + - gh-107526: Revert converting vars, dir, next, getattr, and + iter to argument clinic. + - gh-107674: Fixed performance regression in sys.settrace. + - gh-131740: Update PyUnstable_GC_VisitObjects to traverse perm + gen. + - gh-131865: The DTrace build now properly passes the CC + and CFLAGS variables to the dtrace command when utilizing + SystemTap on Linux. + - gh-130740: Ensure that Python.h is included before + stdbool.h unless pyconfig.h is included before or in some + platform-specific contexts. + - gh-129838: Don’t redefine _Py_NO_SANITIZE_UNDEFINED when + compiling with a recent GCC version and undefined sanitizer + enabled. + - gh-129660: Drop test_embed from PGO training, whose + contribution in recent versions is considered to be + ignorable. + ------------------------------------------------------------------- Mon Mar 10 15:44:31 UTC 2025 - Bernhard Wiedemann diff --git a/python312.spec b/python312.spec index 6c5e5db..3d57886 100644 --- a/python312.spec +++ b/python312.spec @@ -118,7 +118,7 @@ # _md5.cpython-38m-x86_64-linux-gnu.so %define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so Name: %{python_pkg_name}%{psuffix} -Version: 3.12.9 +Version: 3.12.10 Release: 0 Summary: Python 3 Interpreter License: Python-2.0 diff --git a/subprocess-raise-timeout.patch b/subprocess-raise-timeout.patch index a15acaa..e142103 100644 --- a/subprocess-raise-timeout.patch +++ b/subprocess-raise-timeout.patch @@ -1,18 +1,21 @@ --- - Lib/test/test_subprocess.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + Lib/test/test_subprocess.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) -Index: Python-3.12.4/Lib/test/test_subprocess.py +Index: Python-3.12.10/Lib/test/test_subprocess.py =================================================================== ---- Python-3.12.4.orig/Lib/test/test_subprocess.py -+++ Python-3.12.4/Lib/test/test_subprocess.py -@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase): - "time.sleep(3600)"], - # Some heavily loaded buildbots (sparc Debian 3.x) require - # this much time to start and print. -- timeout=3) -+ # OBS might require even more -+ timeout=10) - self.fail("Expected TimeoutExpired.") - self.assertEqual(c.exception.output, b'BDFL') +--- Python-3.12.10.orig/Lib/test/test_subprocess.py 2025-04-11 21:04:45.154639562 +0200 ++++ Python-3.12.10/Lib/test/test_subprocess.py 2025-04-11 21:12:03.374471647 +0200 +@@ -274,7 +274,11 @@ + output = subprocess.check_output( + [sys.executable, "-c", + "import time; time.sleep(3600)"], +- timeout=0.1) ++ # Some heavily loaded buildbots (sparc Debian 3.x) require ++ # this much time to start and print. ++ # timeout=0.1) ++ # OBS might require even more ++ timeout=10) + def test_call_kwargs(self): + # call() function with keyword args