SHA256
1
0
forked from pool/python312

Accepting request 1102750 from devel:languages:python:Factory

OBS-URL: https://build.opensuse.org/request/show/1102750
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python312?expand=0&rev=6
This commit is contained in:
Dominique Leuenberger 2023-08-08 13:54:45 +00:00 committed by Git OBS Bridge
commit 1ff7c3b41f
17 changed files with 305 additions and 445 deletions

View File

@ -29,10 +29,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
Lib/test/test_sysconfig.py | 17 +++++++++++-- Lib/test/test_sysconfig.py | 17 +++++++++++--
3 files changed, 71 insertions(+), 4 deletions(-) 3 files changed, 71 insertions(+), 4 deletions(-)
Index: Python-3.12.0b1/Lib/site.py Index: Python-3.12.0rc1/Lib/site.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/site.py --- Python-3.12.0rc1.orig/Lib/site.py
+++ Python-3.12.0b1/Lib/site.py +++ Python-3.12.0rc1/Lib/site.py
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None): @@ -377,8 +377,15 @@ def getsitepackages(prefixes=None):
return sitepackages return sitepackages
@ -50,10 +50,10 @@ Index: Python-3.12.0b1/Lib/site.py
for sitedir in getsitepackages(prefixes): for sitedir in getsitepackages(prefixes):
if os.path.isdir(sitedir): if os.path.isdir(sitedir):
addsitedir(sitedir, known_paths) addsitedir(sitedir, known_paths)
Index: Python-3.12.0b1/Lib/sysconfig.py Index: Python-3.12.0rc1/Lib/sysconfig.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/sysconfig.py --- Python-3.12.0rc1.orig/Lib/sysconfig.py
+++ Python-3.12.0b1/Lib/sysconfig.py +++ Python-3.12.0rc1/Lib/sysconfig.py
@@ -104,6 +104,11 @@ if os.name == 'nt': @@ -104,6 +104,11 @@ if os.name == 'nt':
else: else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@ -128,10 +128,10 @@ Index: Python-3.12.0b1/Lib/sysconfig.py
if os.name == 'nt': if os.name == 'nt':
# On Windows we want to substitute 'lib' for schemes rather # On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it # than the native value (without modifying vars, in case it
Index: Python-3.12.0b1/Lib/test/test_sysconfig.py Index: Python-3.12.0rc1/Lib/test/test_sysconfig.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_sysconfig.py --- Python-3.12.0rc1.orig/Lib/test/test_sysconfig.py
+++ Python-3.12.0b1/Lib/test/test_sysconfig.py +++ Python-3.12.0rc1/Lib/test/test_sysconfig.py
@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase): @@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase):
for scheme in _INSTALL_SCHEMES: for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]: for name in _INSTALL_SCHEMES[scheme]:

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f05710c36aee5850f5c2769be76b80bf212aec351438fdf8adc20c38c8361fac
size 20244176

View File

@ -1,18 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmStSfVfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwW0RQ//cCsYuhgw+RUslhcDQSNDc+Fuhb0estm7MRzH7VnkUwrrKMTTedWxGp8z
KrJmsH/PRL1c+AX9+1Hi9sr4enh9jgV1KQuqW7TfqS7w+qhlt9krdaDX7zdHqy2k
K0KLua5bv62MBPF5hPM6cP71WJcOsZZLw7r2Cx6USapq6hnSuew7XpSB9zqyehLs
bZOHIAlI1DK6sIdmO42fJr9AZWIO3Z5QhQLglMrHcn9LIp9P/gftVSLt2ZnPQ0qE
2f8d+XyEP0OG+oErbu+aZxHBroVSTEqp85lEVee/Sr0r8+dOJzgF/vVnpHKzu54M
csmRXVljhMm+Iy2rzIuSvI3YFqPL7PBUezRuGDeUDFwkapt+XsiO0eMddxX7W7U2
isinSriLFmAKxHiIy76E8ELkJ/uUxNdN3Hgqey9g5VbfpEYUGSBT6wGoG3FQ3jHq
gI0XqxSfTqVyM7XBlg2Uyf+3wv4Vhku/6xH3CTPEJYGqiR9ZobR1cv3MMAtRQodx
5kD0Rhb9MF0Q/LEIAF0W99mJaAhn+wpf0bwP4/U+3LXmH5RsKoe8eGnyAGiejVn7
RajZUhFRqsC2g+n9sjhXX+vNPcbl4OykTZat94Bfq5jBBRBlm0nx5Qf/bCFzmjzM
v3s2FWCQ8eM0sgPQkSYn3Zal9pEG+iDXtz7ODrsl998RlkknjrA=
=aiWo
-----END PGP SIGNATURE-----

3
Python-3.12.0rc1.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bd88d516b51474d7facae3ed7ab6a421efb17e583c21c8a749470f293e2575fc
size 20285264

View File

@ -0,0 +1,18 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmTOQCpfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwX5DxAAjL+OpYDuAssAXPIdLU4VlzR+whI1kCquPHIgBn8u+xWqgzVMwEyd8x2i
OdvQj+206Hh2sspsrys+sBkyPqGzo/mjlRe18CQvHU8FrjPj8IsZgSU6/gpKcfZL
ZJzUeG6jy6jy2LygM2cmgDEhr8kl6fNQ5hAV/jkpuzLZe0M4oEsKQRCQVC5D8rSE
5NLV6ZUK8/MeFd6S3BXSsUrx1bgr0Pi2YDlfTAqB++BBWiQiLsclNpwvMHlcu1D4
z3QM3GXBkUQrh2QAtRKomJdqDILdakIuJg+aKD+ZuRZxzNcdFBVH9PBbSpfObSJ9
ohBkpVo+MpEDJNq64N9AjnH0xT/cpvGimmsoVZ+zMU26uDm4qyGoDfem2UNgHuaz
4m+QmDoIUSYbhegsMXzcPRyGFKFb6fOCyWBQbb2YB6oo2vPVYNNpHFsMx21Gi43K
54vk0eBYzVBChOsY+igEdFZMbwQ7PEkajGbgQ4FiXhGlA7otQp7mx/IxjVcT1SxA
A07fXAFYF2aZkLlw4V09EeDdkrcO00pCGtTGXhfFCO0KsfyAWm3k8xLGgLFVzDyl
afMTMo2W5kEeL2Ui8fkxWBBtvF8xrF67XT6vT+kaElk1yrG8dIixG0fEVsoDPpz2
edbb/Kd5MNyWzjMfJaW9otlH7KjPBPRuQzubgmBXXDBxij5C1UI=
=rhXA
-----END PGP SIGNATURE-----

View File

@ -1,299 +0,0 @@
From 4288c623d62cf90d8e4444facb3379fb06d01140 Mon Sep 17 00:00:00 2001
From: "Gregory P. Smith" <greg@krypto.org>
Date: Thu, 20 Jul 2023 20:30:52 -0700
Subject: [PATCH] [3.12] gh-106669: Revert "gh-102988: Detect email address
parsing errors ... (GH-105127)" (GH-106733)
This reverts commit 18dfbd035775c15533d13a98e56b1d2bf5c65f00.
Adds a regression test from the issue.
See https://github.com/python/cpython/issues/106669..
(cherry picked from commit a31dea1feb61793e48fa9aa5014f358352205c1d)
Co-authored-by: Gregory P. Smith <greg@krypto.org>
---
Doc/library/email.utils.rst | 26 --
Doc/whatsnew/3.12.rst | 8
Lib/email/utils.py | 63 ------
Lib/test/test_email/test_email.py | 96 +---------
Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst | 4
5 files changed, 30 insertions(+), 167 deletions(-)
create mode 100644 Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
Index: Python-3.12.0b4/Doc/library/email.utils.rst
===================================================================
--- Python-3.12.0b4.orig/Doc/library/email.utils.rst
+++ Python-3.12.0b4/Doc/library/email.utils.rst
@@ -65,11 +65,6 @@ of the new API.
*email address* parts. Returns a tuple of that information, unless the parse
fails, in which case a 2-tuple of ``('', '')`` is returned.
- .. versionchanged:: 3.12
- For security reasons, addresses that were ambiguous and could parse into
- multiple different addresses now cause ``('', '')`` to be returned
- instead of only one of the *potential* addresses.
-
.. function:: formataddr(pair, charset='utf-8')
@@ -92,7 +87,7 @@ of the new API.
This method returns a list of 2-tuples of the form returned by ``parseaddr()``.
*fieldvalues* is a sequence of header field values as might be returned by
:meth:`Message.get_all <email.message.Message.get_all>`. Here's a simple
- example that gets all the recipients of a message:
+ example that gets all the recipients of a message::
from email.utils import getaddresses
@@ -102,25 +97,6 @@ of the new API.
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
- When parsing fails for a single fieldvalue, a 2-tuple of ``('', '')``
- is returned in its place. Other errors in parsing the list of
- addresses such as a fieldvalue seemingly parsing into multiple
- addresses may result in a list containing a single empty 2-tuple
- ``[('', '')]`` being returned rather than returning potentially
- invalid output.
-
- Example malformed input parsing:
-
- .. doctest::
-
- >>> from email.utils import getaddresses
- >>> getaddresses(['alice@example.com <bob@example.com>', 'me@example.com'])
- [('', '')]
-
- .. versionchanged:: 3.12
- The 2-tuple of ``('', '')`` in the returned values when parsing
- fails were added as to address a security issue.
-
.. function:: parsedate(date)
Index: Python-3.12.0b4/Doc/whatsnew/3.12.rst
===================================================================
--- Python-3.12.0b4.orig/Doc/whatsnew/3.12.rst
+++ Python-3.12.0b4/Doc/whatsnew/3.12.rst
@@ -570,14 +570,6 @@ dis
:data:`~dis.hasarg` collection instead.
(Contributed by Irit Katriel in :gh:`94216`.)
-email
------
-
-* :func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now return
- ``('', '')`` 2-tuples in more situations where invalid email addresses are
- encountered instead of potentially inaccurate values.
- (Contributed by Thomas Dwyer for :gh:`102988` to ameliorate CVE-2023-27043.)
-
fractions
---------
Index: Python-3.12.0b4/Lib/email/utils.py
===================================================================
--- Python-3.12.0b4.orig/Lib/email/utils.py
+++ Python-3.12.0b4/Lib/email/utils.py
@@ -106,54 +106,12 @@ def formataddr(pair, charset='utf-8'):
return address
-def _pre_parse_validation(email_header_fields):
- accepted_values = []
- for v in email_header_fields:
- s = v.replace('\\(', '').replace('\\)', '')
- if s.count('(') != s.count(')'):
- v = "('', '')"
- accepted_values.append(v)
-
- return accepted_values
-
-
-def _post_parse_validation(parsed_email_header_tuples):
- accepted_values = []
- # The parser would have parsed a correctly formatted domain-literal
- # The existence of an [ after parsing indicates a parsing failure
- for v in parsed_email_header_tuples:
- if '[' in v[1]:
- v = ('', '')
- accepted_values.append(v)
-
- return accepted_values
-
def getaddresses(fieldvalues):
- """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue.
-
- When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in
- its place.
-
- If the resulting list of parsed address is not the same as the number of
- fieldvalues in the input list a parsing error has occurred. A list
- containing a single empty 2-tuple [('', '')] is returned in its place.
- This is done to avoid invalid output.
- """
- fieldvalues = [str(v) for v in fieldvalues]
- fieldvalues = _pre_parse_validation(fieldvalues)
- all = COMMASPACE.join(v for v in fieldvalues)
+ """Return a list of (REALNAME, EMAIL) for each fieldvalue."""
+ all = COMMASPACE.join(str(v) for v in fieldvalues)
a = _AddressList(all)
- result = _post_parse_validation(a.addresslist)
-
- n = 0
- for v in fieldvalues:
- n += v.count(',') + 1
-
- if len(result) != n:
- return [('', '')]
-
- return result
+ return a.addresslist
def _format_timetuple_and_zone(timetuple, zone):
@@ -254,18 +212,9 @@ def parseaddr(addr):
Return a tuple of realname and email address, unless the parse fails, in
which case return a 2-tuple of ('', '').
"""
- if isinstance(addr, list):
- addr = addr[0]
-
- if not isinstance(addr, str):
- return ('', '')
-
- addr = _pre_parse_validation([addr])[0]
- addrs = _post_parse_validation(_AddressList(addr).addresslist)
-
- if not addrs or len(addrs) > 1:
- return ('', '')
-
+ addrs = _AddressList(addr).addresslist
+ if not addrs:
+ return '', ''
return addrs[0]
Index: Python-3.12.0b4/Lib/test/test_email/test_email.py
===================================================================
--- Python-3.12.0b4.orig/Lib/test/test_email/test_email.py
+++ Python-3.12.0b4/Lib/test/test_email/test_email.py
@@ -3319,90 +3319,32 @@ Foo
[('Al Person', 'aperson@dom.ain'),
('Bud Person', 'bperson@dom.ain')])
- def test_getaddresses_parsing_errors(self):
- """Test for parsing errors from CVE-2023-27043"""
- eq = self.assertEqual
- eq(utils.getaddresses(['alice@example.org(<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org)<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org<<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org><bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org@<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org,<bob@example.com>']),
- [('', 'alice@example.org'), ('', 'bob@example.com')])
- eq(utils.getaddresses(['alice@example.org;<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org:<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org.<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org"<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org[<bob@example.com>']),
- [('', '')])
- eq(utils.getaddresses(['alice@example.org]<bob@example.com>']),
- [('', '')])
-
- def test_parseaddr_parsing_errors(self):
- """Test for parsing errors from CVE-2023-27043"""
- eq = self.assertEqual
- eq(utils.parseaddr(['alice@example.org(<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org)<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org<<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org><bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org@<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org,<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org;<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org:<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org.<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org"<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org[<bob@example.com>']),
- ('', ''))
- eq(utils.parseaddr(['alice@example.org]<bob@example.com>']),
- ('', ''))
+ def test_getaddresses_comma_in_name(self):
+ """GH-106669 regression test."""
+ self.assertEqual(
+ utils.getaddresses(
+ [
+ '"Bud, Person" <bperson@dom.ain>',
+ 'aperson@dom.ain (Al Person)',
+ '"Mariusz Felisiak" <to@example.com>',
+ ]
+ ),
+ [
+ ('Bud, Person', 'bperson@dom.ain'),
+ ('Al Person', 'aperson@dom.ain'),
+ ('Mariusz Felisiak', 'to@example.com'),
+ ],
+ )
def test_getaddresses_nasty(self):
eq = self.assertEqual
eq(utils.getaddresses(['foo: ;']), [('', '')])
- eq(utils.getaddresses(['[]*-- =~$']), [('', '')])
+ eq(utils.getaddresses(
+ ['[]*-- =~$']),
+ [('', ''), ('', ''), ('', '*--')])
eq(utils.getaddresses(
['foo: ;', '"Jason R. Mastaler" <jason@dom.ain>']),
[('', ''), ('Jason R. Mastaler', 'jason@dom.ain')])
- eq(utils.getaddresses(
- [r'Pete(A nice \) chap) <pete(his account)@silly.test(his host)>']),
- [('Pete (A nice ) chap his account his host)', 'pete@silly.test')])
- eq(utils.getaddresses(
- ['(Empty list)(start)Undisclosed recipients :(nobody(I know))']),
- [('', '')])
- eq(utils.getaddresses(
- ['Mary <@machine.tld:mary@example.net>, , jdoe@test . example']),
- [('Mary', 'mary@example.net'), ('', ''), ('', 'jdoe@test.example')])
- eq(utils.getaddresses(
- ['John Doe <jdoe@machine(comment). example>']),
- [('John Doe (comment)', 'jdoe@machine.example')])
- eq(utils.getaddresses(
- ['"Mary Smith: Personal Account" <smith@home.example>']),
- [('Mary Smith: Personal Account', 'smith@home.example')])
- eq(utils.getaddresses(
- ['Undisclosed recipients:;']),
- [('', '')])
- eq(utils.getaddresses(
- [r'<boss@nil.test>, "Giant; \"Big\" Box" <bob@example.net>']),
- [('', 'boss@nil.test'), ('Giant; "Big" Box', 'bob@example.net')])
def test_getaddresses_embedded_comment(self):
"""Test proper handling of a nested comment"""
Index: Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
===================================================================
--- /dev/null
+++ Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
@@ -0,0 +1,4 @@
+Reverted the :mod:`email.utils` security improvement change released in
+3.12beta4 that unintentionally caused :mod:`email.utils.getaddresses` to fail
+to parse email addresses with a comma in the quoted name field.
+See :gh:`106669`.

View File

@ -13,10 +13,10 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
5 files changed, 34 insertions(+), 9 deletions(-) 5 files changed, 34 insertions(+), 9 deletions(-)
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
Index: Python-3.12.0b1/Doc/library/ensurepip.rst Index: Python-3.12.0rc1/Doc/library/ensurepip.rst
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Doc/library/ensurepip.rst --- Python-3.12.0rc1.orig/Doc/library/ensurepip.rst
+++ Python-3.12.0b1/Doc/library/ensurepip.rst +++ Python-3.12.0rc1/Doc/library/ensurepip.rst
@@ -59,8 +59,9 @@ is at least as recent as the one availab @@ -59,8 +59,9 @@ is at least as recent as the one availab
By default, ``pip`` is installed into the current virtual environment By default, ``pip`` is installed into the current virtual environment
(if one is active) or into the system site packages (if there is no (if one is active) or into the system site packages (if there is no
@ -55,10 +55,10 @@ Index: Python-3.12.0b1/Doc/library/ensurepip.rst
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap .. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
.. note:: .. note::
Index: Python-3.12.0b1/Lib/ensurepip/__init__.py Index: Python-3.12.0rc1/Lib/ensurepip/__init__.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/ensurepip/__init__.py --- Python-3.12.0rc1.orig/Lib/ensurepip/__init__.py
+++ Python-3.12.0b1/Lib/ensurepip/__init__.py +++ Python-3.12.0rc1/Lib/ensurepip/__init__.py
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings( @@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
os.environ['PIP_CONFIG_FILE'] = os.devnull os.environ['PIP_CONFIG_FILE'] = os.devnull
@ -121,10 +121,10 @@ Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
upgrade=args.upgrade, upgrade=args.upgrade,
user=args.user, user=args.user,
verbosity=args.verbosity, verbosity=args.verbosity,
Index: Python-3.12.0b1/Lib/test/test_ensurepip.py Index: Python-3.12.0rc1/Lib/test/test_ensurepip.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_ensurepip.py --- Python-3.12.0rc1.orig/Lib/test/test_ensurepip.py
+++ Python-3.12.0b1/Lib/test/test_ensurepip.py +++ Python-3.12.0rc1/Lib/test/test_ensurepip.py
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit @@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
unittest.mock.ANY, unittest.mock.ANY,
) )
@ -143,11 +143,11 @@ Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
def test_bootstrapping_with_user(self): def test_bootstrapping_with_user(self):
ensurepip.bootstrap(user=True) ensurepip.bootstrap(user=True)
Index: Python-3.12.0b1/Makefile.pre.in Index: Python-3.12.0rc1/Makefile.pre.in
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Makefile.pre.in --- Python-3.12.0rc1.orig/Makefile.pre.in
+++ Python-3.12.0b1/Makefile.pre.in +++ Python-3.12.0rc1/Makefile.pre.in
@@ -1908,7 +1908,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni @@ -1909,7 +1909,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
install|*) ensurepip="" ;; \ install|*) ensurepip="" ;; \
esac; \ esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@ -156,7 +156,7 @@ Index: Python-3.12.0b1/Makefile.pre.in
fi fi
.PHONY: altinstall .PHONY: altinstall
@@ -1919,7 +1919,7 @@ altinstall: commoninstall @@ -1920,7 +1920,7 @@ altinstall: commoninstall
install|*) ensurepip="--altinstall" ;; \ install|*) ensurepip="--altinstall" ;; \
esac; \ esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@ -165,9 +165,9 @@ Index: Python-3.12.0b1/Makefile.pre.in
fi fi
.PHONY: commoninstall .PHONY: commoninstall
Index: Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst Index: Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
=================================================================== ===================================================================
--- /dev/null --- /dev/null
+++ Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst +++ Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
@@ -0,0 +1 @@ @@ -0,0 +1 @@
+A directory prefix can now be specified when using :mod:`ensurepip`. +A directory prefix can now be specified when using :mod:`ensurepip`.

12
externally_managed.in Normal file
View File

@ -0,0 +1,12 @@
[externally-managed]
Error=To install Python packages system-wide, try
zypper install __PYTHONPREFIX__-xyz, where xyz is the package
you are trying to install.
If you wish to install a non-rpm packaged Python package,
create a virtual environment using __PYTHON__ -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip.
If you wish to install a non-rpm packaged Python application,
it may be easiest to use `pipx install xyz`, which will manage a
virtual environment for you. Install pipx via `zypper install __PYTHONPREFIX__-pipx` .

View File

@ -3,8 +3,10 @@
Misc/NEWS | 2 +- Misc/NEWS | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-) 2 files changed, 1 insertion(+), 3 deletions(-)
--- a/Doc/using/configure.rst Index: Python-3.12.0rc1/Doc/using/configure.rst
+++ b/Doc/using/configure.rst ===================================================================
--- Python-3.12.0rc1.orig/Doc/using/configure.rst
+++ Python-3.12.0rc1/Doc/using/configure.rst
@@ -599,13 +599,11 @@ macOS Options @@ -599,13 +599,11 @@ macOS Options
See ``Mac/README.rst``. See ``Mac/README.rst``.
@ -19,9 +21,11 @@
.. cmdoption:: --enable-framework=INSTALLDIR .. cmdoption:: --enable-framework=INSTALLDIR
Create a Python.framework rather than a traditional Unix install. Optional Create a Python.framework rather than a traditional Unix install. Optional
--- a/Misc/NEWS Index: Python-3.12.0rc1/Misc/NEWS
+++ b/Misc/NEWS ===================================================================
@@ -11318,7 +11318,7 @@ C API --- Python-3.12.0rc1.orig/Misc/NEWS
+++ Python-3.12.0rc1/Misc/NEWS
@@ -11530,7 +11530,7 @@ C API
- bpo-40939: Removed documentation for the removed ``PyParser_*`` C API. - bpo-40939: Removed documentation for the removed ``PyParser_*`` C API.
- bpo-43795: The list in :ref:`limited-api-list` now shows the public name - bpo-43795: The list in :ref:`limited-api-list` now shows the public name

View File

@ -4,9 +4,11 @@ unchanged:
Doc/library/turtle.rst | 81 ------------------------------------------------- Doc/library/turtle.rst | 81 -------------------------------------------------
1 file changed, 81 deletions(-) 1 file changed, 81 deletions(-)
--- a/Doc/library/turtle.rst Index: Python-3.12.0rc1/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst ===================================================================
@@ -251,7 +251,6 @@ Turtle motion --- Python-3.12.0rc1.orig/Doc/library/turtle.rst
+++ Python-3.12.0rc1/Doc/library/turtle.rst
@@ -441,7 +441,6 @@ Turtle motion
turtle is headed. turtle is headed.
.. doctest:: .. doctest::
@ -14,7 +16,7 @@ unchanged:
>>> turtle.position() >>> turtle.position()
(0.00,0.00) (0.00,0.00)
@@ -278,7 +277,6 @@ Turtle motion @@ -468,7 +467,6 @@ Turtle motion
>>> turtle.goto(0, 0) >>> turtle.goto(0, 0)
.. doctest:: .. doctest::
@ -22,7 +24,7 @@ unchanged:
>>> turtle.position() >>> turtle.position()
(0.00,0.00) (0.00,0.00)
@@ -297,13 +295,11 @@ Turtle motion @@ -487,13 +485,11 @@ Turtle motion
orientation depends on the turtle mode, see :func:`mode`. orientation depends on the turtle mode, see :func:`mode`.
.. doctest:: .. doctest::
@ -36,7 +38,7 @@ unchanged:
>>> turtle.heading() >>> turtle.heading()
22.0 22.0
@@ -322,13 +318,11 @@ Turtle motion @@ -512,13 +508,11 @@ Turtle motion
orientation depends on the turtle mode, see :func:`mode`. orientation depends on the turtle mode, see :func:`mode`.
.. doctest:: .. doctest::
@ -50,7 +52,7 @@ unchanged:
>>> turtle.heading() >>> turtle.heading()
22.0 22.0
@@ -351,13 +345,11 @@ Turtle motion @@ -541,13 +535,11 @@ Turtle motion
not change the turtle's orientation. not change the turtle's orientation.
.. doctest:: .. doctest::
@ -64,7 +66,7 @@ unchanged:
>>> tp = turtle.pos() >>> tp = turtle.pos()
>>> tp >>> tp
@@ -419,13 +411,11 @@ Turtle motion @@ -609,13 +601,11 @@ Turtle motion
unchanged. unchanged.
.. doctest:: .. doctest::
@ -78,7 +80,7 @@ unchanged:
>>> turtle.position() >>> turtle.position()
(0.00,240.00) (0.00,240.00)
@@ -441,13 +431,11 @@ Turtle motion @@ -631,13 +621,11 @@ Turtle motion
Set the turtle's second coordinate to *y*, leave first coordinate unchanged. Set the turtle's second coordinate to *y*, leave first coordinate unchanged.
.. doctest:: .. doctest::
@ -92,7 +94,7 @@ unchanged:
>>> turtle.position() >>> turtle.position()
(0.00,40.00) (0.00,40.00)
@@ -474,7 +462,6 @@ Turtle motion @@ -664,7 +652,6 @@ Turtle motion
=================== ==================== =================== ====================
.. doctest:: .. doctest::
@ -100,7 +102,7 @@ unchanged:
>>> turtle.setheading(90) >>> turtle.setheading(90)
>>> turtle.heading() >>> turtle.heading()
@@ -487,14 +474,12 @@ Turtle motion @@ -677,14 +664,12 @@ Turtle motion
its start-orientation (which depends on the mode, see :func:`mode`). its start-orientation (which depends on the mode, see :func:`mode`).
.. doctest:: .. doctest::
@ -115,7 +117,7 @@ unchanged:
>>> turtle.heading() >>> turtle.heading()
90.0 90.0
@@ -526,7 +511,6 @@ Turtle motion @@ -716,7 +701,6 @@ Turtle motion
calculated automatically. May be used to draw regular polygons. calculated automatically. May be used to draw regular polygons.
.. doctest:: .. doctest::
@ -123,7 +125,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.position() >>> turtle.position()
@@ -555,7 +539,6 @@ Turtle motion @@ -745,7 +729,6 @@ Turtle motion
.. doctest:: .. doctest::
@ -131,7 +133,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.dot() >>> turtle.dot()
@@ -573,7 +556,6 @@ Turtle motion @@ -763,7 +746,6 @@ Turtle motion
it by calling ``clearstamp(stamp_id)``. it by calling ``clearstamp(stamp_id)``.
.. doctest:: .. doctest::
@ -139,7 +141,7 @@ unchanged:
>>> turtle.color("blue") >>> turtle.color("blue")
>>> stamp_id = turtle.stamp() >>> stamp_id = turtle.stamp()
@@ -588,7 +570,6 @@ Turtle motion @@ -778,7 +760,6 @@ Turtle motion
Delete stamp with given *stampid*. Delete stamp with given *stampid*.
.. doctest:: .. doctest::
@ -147,7 +149,7 @@ unchanged:
>>> turtle.position() >>> turtle.position()
(150.00,-0.00) (150.00,-0.00)
@@ -626,7 +607,6 @@ Turtle motion @@ -816,7 +797,6 @@ Turtle motion
undo actions is determined by the size of the undobuffer. undo actions is determined by the size of the undobuffer.
.. doctest:: .. doctest::
@ -155,7 +157,7 @@ unchanged:
>>> for i in range(4): >>> for i in range(4):
... turtle.fd(50); turtle.lt(80) ... turtle.fd(50); turtle.lt(80)
@@ -659,7 +639,6 @@ Turtle motion @@ -849,7 +829,6 @@ Turtle motion
turtle turn instantly. turtle turn instantly.
.. doctest:: .. doctest::
@ -163,7 +165,7 @@ unchanged:
>>> turtle.speed() >>> turtle.speed()
3 3
@@ -680,7 +659,6 @@ Tell Turtle's state @@ -870,7 +849,6 @@ Tell Turtle's state
Return the turtle's current location (x,y) (as a :class:`Vec2D` vector). Return the turtle's current location (x,y) (as a :class:`Vec2D` vector).
.. doctest:: .. doctest::
@ -171,7 +173,7 @@ unchanged:
>>> turtle.pos() >>> turtle.pos()
(440.00,-0.00) (440.00,-0.00)
@@ -696,7 +674,6 @@ Tell Turtle's state @@ -886,7 +864,6 @@ Tell Turtle's state
orientation which depends on the mode - "standard"/"world" or "logo". orientation which depends on the mode - "standard"/"world" or "logo".
.. doctest:: .. doctest::
@ -179,7 +181,7 @@ unchanged:
>>> turtle.goto(10, 10) >>> turtle.goto(10, 10)
>>> turtle.towards(0,0) >>> turtle.towards(0,0)
@@ -708,7 +685,6 @@ Tell Turtle's state @@ -898,7 +875,6 @@ Tell Turtle's state
Return the turtle's x coordinate. Return the turtle's x coordinate.
.. doctest:: .. doctest::
@ -187,7 +189,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.left(50) >>> turtle.left(50)
@@ -724,7 +700,6 @@ Tell Turtle's state @@ -914,7 +890,6 @@ Tell Turtle's state
Return the turtle's y coordinate. Return the turtle's y coordinate.
.. doctest:: .. doctest::
@ -195,7 +197,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.left(60) >>> turtle.left(60)
@@ -741,7 +716,6 @@ Tell Turtle's state @@ -931,7 +906,6 @@ Tell Turtle's state
:func:`mode`). :func:`mode`).
.. doctest:: .. doctest::
@ -203,7 +205,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.left(67) >>> turtle.left(67)
@@ -758,7 +732,6 @@ Tell Turtle's state @@ -948,7 +922,6 @@ Tell Turtle's state
other turtle, in turtle step units. other turtle, in turtle step units.
.. doctest:: .. doctest::
@ -211,7 +213,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.distance(30,40) >>> turtle.distance(30,40)
@@ -782,7 +755,6 @@ Settings for measurement @@ -972,7 +945,6 @@ Settings for measurement
Default value is 360 degrees. Default value is 360 degrees.
.. doctest:: .. doctest::
@ -219,7 +221,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.left(90) >>> turtle.left(90)
@@ -805,7 +777,6 @@ Settings for measurement @@ -995,7 +967,6 @@ Settings for measurement
``degrees(2*math.pi)``. ``degrees(2*math.pi)``.
.. doctest:: .. doctest::
@ -227,7 +229,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.left(90) >>> turtle.left(90)
@@ -816,7 +787,6 @@ Settings for measurement @@ -1006,7 +977,6 @@ Settings for measurement
1.5707963267948966 1.5707963267948966
.. doctest:: .. doctest::
@ -235,7 +237,7 @@ unchanged:
:hide: :hide:
>>> turtle.degrees(360) >>> turtle.degrees(360)
@@ -852,7 +822,6 @@ Drawing state @@ -1042,7 +1012,6 @@ Drawing state
thickness. If no argument is given, the current pensize is returned. thickness. If no argument is given, the current pensize is returned.
.. doctest:: .. doctest::
@ -243,7 +245,7 @@ unchanged:
>>> turtle.pensize() >>> turtle.pensize()
1 1
@@ -884,7 +853,6 @@ Drawing state @@ -1074,7 +1043,6 @@ Drawing state
attributes in one statement. attributes in one statement.
.. doctest:: .. doctest::
@ -251,7 +253,7 @@ unchanged:
:options: +NORMALIZE_WHITESPACE :options: +NORMALIZE_WHITESPACE
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
@@ -907,7 +875,6 @@ Drawing state @@ -1097,7 +1065,6 @@ Drawing state
Return ``True`` if pen is down, ``False`` if it's up. Return ``True`` if pen is down, ``False`` if it's up.
.. doctest:: .. doctest::
@ -259,7 +261,7 @@ unchanged:
>>> turtle.penup() >>> turtle.penup()
>>> turtle.isdown() >>> turtle.isdown()
@@ -948,7 +915,6 @@ Color control @@ -1138,7 +1105,6 @@ Color control
newly set pencolor. newly set pencolor.
.. doctest:: .. doctest::
@ -267,7 +269,7 @@ unchanged:
>>> colormode() >>> colormode()
1.0 1.0
@@ -997,7 +963,6 @@ Color control @@ -1187,7 +1153,6 @@ Color control
with the newly set fillcolor. with the newly set fillcolor.
.. doctest:: .. doctest::
@ -275,7 +277,7 @@ unchanged:
>>> turtle.fillcolor("violet") >>> turtle.fillcolor("violet")
>>> turtle.fillcolor() >>> turtle.fillcolor()
@@ -1036,7 +1001,6 @@ Color control @@ -1226,7 +1191,6 @@ Color control
with the newly set colors. with the newly set colors.
.. doctest:: .. doctest::
@ -283,7 +285,7 @@ unchanged:
>>> turtle.color("red", "green") >>> turtle.color("red", "green")
>>> turtle.color() >>> turtle.color()
@@ -1053,7 +1017,6 @@ Filling @@ -1243,7 +1207,6 @@ Filling
~~~~~~~ ~~~~~~~
.. doctest:: .. doctest::
@ -291,7 +293,7 @@ unchanged:
:hide: :hide:
>>> turtle.home() >>> turtle.home()
@@ -1063,7 +1026,6 @@ Filling @@ -1253,7 +1216,6 @@ Filling
Return fillstate (``True`` if filling, ``False`` else). Return fillstate (``True`` if filling, ``False`` else).
.. doctest:: .. doctest::
@ -299,7 +301,7 @@ unchanged:
>>> turtle.begin_fill() >>> turtle.begin_fill()
>>> if turtle.filling(): >>> if turtle.filling():
@@ -1088,7 +1050,6 @@ Filling @@ -1278,7 +1240,6 @@ Filling
above may be either all yellow or have some white regions. above may be either all yellow or have some white regions.
.. doctest:: .. doctest::
@ -307,7 +309,7 @@ unchanged:
>>> turtle.color("black", "red") >>> turtle.color("black", "red")
>>> turtle.begin_fill() >>> turtle.begin_fill()
@@ -1105,7 +1066,6 @@ More drawing control @@ -1295,7 +1256,6 @@ More drawing control
variables to the default values. variables to the default values.
.. doctest:: .. doctest::
@ -315,7 +317,7 @@ unchanged:
>>> turtle.goto(0,-22) >>> turtle.goto(0,-22)
>>> turtle.left(100) >>> turtle.left(100)
@@ -1156,7 +1116,6 @@ Visibility @@ -1346,7 +1306,6 @@ Visibility
drawing observably. drawing observably.
.. doctest:: .. doctest::
@ -323,7 +325,7 @@ unchanged:
>>> turtle.hideturtle() >>> turtle.hideturtle()
@@ -1167,7 +1126,6 @@ Visibility @@ -1357,7 +1316,6 @@ Visibility
Make the turtle visible. Make the turtle visible.
.. doctest:: .. doctest::
@ -331,7 +333,7 @@ unchanged:
>>> turtle.showturtle() >>> turtle.showturtle()
@@ -1198,7 +1156,6 @@ Appearance @@ -1388,7 +1346,6 @@ Appearance
deal with shapes see Screen method :func:`register_shape`. deal with shapes see Screen method :func:`register_shape`.
.. doctest:: .. doctest::
@ -339,7 +341,7 @@ unchanged:
>>> turtle.shape() >>> turtle.shape()
'classic' 'classic'
@@ -1224,7 +1181,6 @@ Appearance @@ -1414,7 +1371,6 @@ Appearance
``resizemode("user")`` is called by :func:`shapesize` when used with arguments. ``resizemode("user")`` is called by :func:`shapesize` when used with arguments.
.. doctest:: .. doctest::
@ -347,7 +349,7 @@ unchanged:
>>> turtle.resizemode() >>> turtle.resizemode()
'noresize' 'noresize'
@@ -1248,7 +1204,6 @@ Appearance @@ -1438,7 +1394,6 @@ Appearance
of the shape's outline. of the shape's outline.
.. doctest:: .. doctest::
@ -355,7 +357,7 @@ unchanged:
>>> turtle.shapesize() >>> turtle.shapesize()
(1.0, 1.0, 1) (1.0, 1.0, 1)
@@ -1273,7 +1228,6 @@ Appearance @@ -1463,7 +1418,6 @@ Appearance
heading of the turtle are sheared. heading of the turtle are sheared.
.. doctest:: .. doctest::
@ -363,7 +365,7 @@ unchanged:
>>> turtle.shape("circle") >>> turtle.shape("circle")
>>> turtle.shapesize(5,2) >>> turtle.shapesize(5,2)
@@ -1290,7 +1244,6 @@ Appearance @@ -1480,7 +1434,6 @@ Appearance
change the turtle's heading (direction of movement). change the turtle's heading (direction of movement).
.. doctest:: .. doctest::
@ -371,7 +373,7 @@ unchanged:
>>> turtle.reset() >>> turtle.reset()
>>> turtle.shape("circle") >>> turtle.shape("circle")
@@ -1336,7 +1289,6 @@ Appearance @@ -1526,7 +1479,6 @@ Appearance
turtle (its direction of movement). turtle (its direction of movement).
.. doctest:: .. doctest::
@ -379,7 +381,7 @@ unchanged:
>>> turtle.reset() >>> turtle.reset()
>>> turtle.shape("circle") >>> turtle.shape("circle")
@@ -1365,7 +1317,6 @@ Appearance @@ -1555,7 +1507,6 @@ Appearance
given matrix. given matrix.
.. doctest:: .. doctest::
@ -387,7 +389,7 @@ unchanged:
>>> turtle = Turtle() >>> turtle = Turtle()
>>> turtle.shape("square") >>> turtle.shape("square")
@@ -1381,7 +1332,6 @@ Appearance @@ -1571,7 +1522,6 @@ Appearance
can be used to define a new shape or components of a compound shape. can be used to define a new shape or components of a compound shape.
.. doctest:: .. doctest::
@ -395,7 +397,7 @@ unchanged:
>>> turtle.shape("square") >>> turtle.shape("square")
>>> turtle.shapetransform(4, -1, 0, 2) >>> turtle.shapetransform(4, -1, 0, 2)
@@ -1406,7 +1356,6 @@ Using events @@ -1596,7 +1546,6 @@ Using events
procedural way: procedural way:
.. doctest:: .. doctest::
@ -403,7 +405,7 @@ unchanged:
>>> def turn(x, y): >>> def turn(x, y):
... left(180) ... left(180)
@@ -1427,7 +1376,6 @@ Using events @@ -1617,7 +1566,6 @@ Using events
``None``, existing bindings are removed. ``None``, existing bindings are removed.
.. doctest:: .. doctest::
@ -411,7 +413,7 @@ unchanged:
>>> class MyTurtle(Turtle): >>> class MyTurtle(Turtle):
... def glow(self,x,y): ... def glow(self,x,y):
@@ -1455,7 +1403,6 @@ Using events @@ -1645,7 +1593,6 @@ Using events
mouse-click event on that turtle. mouse-click event on that turtle.
.. doctest:: .. doctest::
@ -419,7 +421,7 @@ unchanged:
>>> turtle.ondrag(turtle.goto) >>> turtle.ondrag(turtle.goto)
@@ -1483,7 +1430,6 @@ Special Turtle methods @@ -1673,7 +1620,6 @@ Special Turtle methods
Return the last recorded polygon. Return the last recorded polygon.
.. doctest:: .. doctest::
@ -427,7 +429,7 @@ unchanged:
>>> turtle.home() >>> turtle.home()
>>> turtle.begin_poly() >>> turtle.begin_poly()
@@ -1503,7 +1449,6 @@ Special Turtle methods @@ -1693,7 +1639,6 @@ Special Turtle methods
turtle properties. turtle properties.
.. doctest:: .. doctest::
@ -435,7 +437,7 @@ unchanged:
>>> mick = Turtle() >>> mick = Turtle()
>>> joe = mick.clone() >>> joe = mick.clone()
@@ -1516,7 +1461,6 @@ Special Turtle methods @@ -1706,7 +1651,6 @@ Special Turtle methods
return the "anonymous turtle": return the "anonymous turtle":
.. doctest:: .. doctest::
@ -443,7 +445,7 @@ unchanged:
>>> pet = getturtle() >>> pet = getturtle()
>>> pet.fd(50) >>> pet.fd(50)
@@ -1530,7 +1474,6 @@ Special Turtle methods @@ -1720,7 +1664,6 @@ Special Turtle methods
TurtleScreen methods can then be called for that object. TurtleScreen methods can then be called for that object.
.. doctest:: .. doctest::
@ -451,7 +453,7 @@ unchanged:
>>> ts = turtle.getscreen() >>> ts = turtle.getscreen()
>>> ts >>> ts
@@ -1548,7 +1491,6 @@ Special Turtle methods @@ -1738,7 +1681,6 @@ Special Turtle methods
``None``, the undobuffer is disabled. ``None``, the undobuffer is disabled.
.. doctest:: .. doctest::
@ -459,7 +461,7 @@ unchanged:
>>> turtle.setundobuffer(42) >>> turtle.setundobuffer(42)
@@ -1558,7 +1500,6 @@ Special Turtle methods @@ -1748,7 +1690,6 @@ Special Turtle methods
Return number of entries in the undobuffer. Return number of entries in the undobuffer.
.. doctest:: .. doctest::
@ -467,7 +469,7 @@ unchanged:
>>> while undobufferentries(): >>> while undobufferentries():
... undo() ... undo()
@@ -1581,7 +1522,6 @@ below: @@ -1771,7 +1712,6 @@ below:
For example: For example:
.. doctest:: .. doctest::
@ -475,7 +477,7 @@ unchanged:
>>> s = Shape("compound") >>> s = Shape("compound")
>>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
@@ -1592,7 +1532,6 @@ below: @@ -1782,7 +1722,6 @@ below:
3. Now add the Shape to the Screen's shapelist and use it: 3. Now add the Shape to the Screen's shapelist and use it:
.. doctest:: .. doctest::
@ -483,7 +485,7 @@ unchanged:
>>> register_shape("myshape", s) >>> register_shape("myshape", s)
>>> shape("myshape") >>> shape("myshape")
@@ -1612,7 +1551,6 @@ Most of the examples in this section ref @@ -1802,7 +1741,6 @@ Most of the examples in this section ref
``screen``. ``screen``.
.. doctest:: .. doctest::
@ -491,7 +493,7 @@ unchanged:
:hide: :hide:
>>> screen = Screen() >>> screen = Screen()
@@ -1629,7 +1567,6 @@ Window control @@ -1819,7 +1757,6 @@ Window control
Set or return background color of the TurtleScreen. Set or return background color of the TurtleScreen.
.. doctest:: .. doctest::
@ -499,7 +501,7 @@ unchanged:
>>> screen.bgcolor("orange") >>> screen.bgcolor("orange")
>>> screen.bgcolor() >>> screen.bgcolor()
@@ -1721,7 +1658,6 @@ Window control @@ -1911,7 +1848,6 @@ Window control
distorted. distorted.
.. doctest:: .. doctest::
@ -507,7 +509,7 @@ unchanged:
>>> screen.reset() >>> screen.reset()
>>> screen.setworldcoordinates(-50,-7.5,50,7.5) >>> screen.setworldcoordinates(-50,-7.5,50,7.5)
@@ -1732,7 +1668,6 @@ Window control @@ -1922,7 +1858,6 @@ Window control
... left(45); fd(2) # a regular octagon ... left(45); fd(2) # a regular octagon
.. doctest:: .. doctest::
@ -515,7 +517,7 @@ unchanged:
:hide: :hide:
>>> screen.reset() >>> screen.reset()
@@ -1754,7 +1689,6 @@ Animation control @@ -1944,7 +1879,6 @@ Animation control
Optional argument: Optional argument:
.. doctest:: .. doctest::
@ -523,7 +525,7 @@ unchanged:
>>> screen.delay() >>> screen.delay()
10 10
@@ -1776,7 +1710,6 @@ Animation control @@ -1966,7 +1900,6 @@ Animation control
:func:`delay`). :func:`delay`).
.. doctest:: .. doctest::
@ -531,7 +533,7 @@ unchanged:
>>> screen.tracer(8, 25) >>> screen.tracer(8, 25)
>>> dist = 2 >>> dist = 2
@@ -1813,7 +1746,6 @@ Using screen events @@ -2003,7 +1936,6 @@ Using screen events
must have the focus. (See method :func:`listen`.) must have the focus. (See method :func:`listen`.)
.. doctest:: .. doctest::
@ -539,7 +541,7 @@ unchanged:
>>> def f(): >>> def f():
... fd(50) ... fd(50)
@@ -1834,7 +1766,6 @@ Using screen events @@ -2024,7 +1956,6 @@ Using screen events
must have focus. (See method :func:`listen`.) must have focus. (See method :func:`listen`.)
.. doctest:: .. doctest::
@ -547,7 +549,7 @@ unchanged:
>>> def f(): >>> def f():
... fd(50) ... fd(50)
@@ -1859,7 +1790,6 @@ Using screen events @@ -2049,7 +1980,6 @@ Using screen events
named ``turtle``: named ``turtle``:
.. doctest:: .. doctest::
@ -555,7 +557,7 @@ unchanged:
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will >>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
>>> # make the turtle move to the clicked point. >>> # make the turtle move to the clicked point.
@@ -1879,7 +1809,6 @@ Using screen events @@ -2069,7 +1999,6 @@ Using screen events
Install a timer that calls *fun* after *t* milliseconds. Install a timer that calls *fun* after *t* milliseconds.
.. doctest:: .. doctest::
@ -563,7 +565,7 @@ unchanged:
>>> running = True >>> running = True
>>> def f(): >>> def f():
@@ -1961,7 +1890,6 @@ Settings and special methods @@ -2151,7 +2080,6 @@ Settings and special methods
============ ========================= =================== ============ ========================= ===================
.. doctest:: .. doctest::
@ -571,7 +573,7 @@ unchanged:
>>> mode("logo") # resets turtle heading to north >>> mode("logo") # resets turtle heading to north
>>> mode() >>> mode()
@@ -1976,7 +1904,6 @@ Settings and special methods @@ -2166,7 +2094,6 @@ Settings and special methods
values of color triples have to be in the range 0..*cmode*. values of color triples have to be in the range 0..*cmode*.
.. doctest:: .. doctest::
@ -579,7 +581,7 @@ unchanged:
>>> screen.colormode(1) >>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80) >>> turtle.pencolor(240, 160, 80)
@@ -1997,7 +1924,6 @@ Settings and special methods @@ -2187,7 +2114,6 @@ Settings and special methods
do with a Tkinter Canvas. do with a Tkinter Canvas.
.. doctest:: .. doctest::
@ -587,7 +589,7 @@ unchanged:
>>> cv = screen.getcanvas() >>> cv = screen.getcanvas()
>>> cv >>> cv
@@ -2009,7 +1935,6 @@ Settings and special methods @@ -2199,7 +2125,6 @@ Settings and special methods
Return a list of names of all currently available turtle shapes. Return a list of names of all currently available turtle shapes.
.. doctest:: .. doctest::
@ -595,7 +597,7 @@ unchanged:
>>> screen.getshapes() >>> screen.getshapes()
['arrow', 'blank', 'circle', ..., 'turtle'] ['arrow', 'blank', 'circle', ..., 'turtle']
@@ -2033,7 +1958,6 @@ Settings and special methods @@ -2223,7 +2148,6 @@ Settings and special methods
coordinates: Install the corresponding polygon shape. coordinates: Install the corresponding polygon shape.
.. doctest:: .. doctest::
@ -603,7 +605,7 @@ unchanged:
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3))) >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
@@ -2049,7 +1973,6 @@ Settings and special methods @@ -2239,7 +2163,6 @@ Settings and special methods
Return the list of turtles on the screen. Return the list of turtles on the screen.
.. doctest:: .. doctest::
@ -611,7 +613,7 @@ unchanged:
>>> for turtle in screen.turtles(): >>> for turtle in screen.turtles():
... turtle.color("red") ... turtle.color("red")
@@ -2111,7 +2034,6 @@ Methods specific to Screen, not inherite @@ -2301,7 +2224,6 @@ Methods specific to Screen, not inherite
center window vertically center window vertically
.. doctest:: .. doctest::
@ -619,7 +621,7 @@ unchanged:
>>> screen.setup (width=200, height=200, startx=0, starty=0) >>> screen.setup (width=200, height=200, startx=0, starty=0)
>>> # sets window to 200x200 pixels, in upper left of screen >>> # sets window to 200x200 pixels, in upper left of screen
@@ -2127,7 +2049,6 @@ Methods specific to Screen, not inherite @@ -2317,7 +2239,6 @@ Methods specific to Screen, not inherite
Set title of turtle window to *titlestring*. Set title of turtle window to *titlestring*.
.. doctest:: .. doctest::
@ -627,7 +629,7 @@ unchanged:
>>> screen.title("Welcome to the turtle zoo!") >>> screen.title("Welcome to the turtle zoo!")
@@ -2198,7 +2119,6 @@ Public classes @@ -2388,7 +2309,6 @@ Public classes
Example: Example:
.. doctest:: .. doctest::
@ -635,7 +637,7 @@ unchanged:
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) >>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound") >>> s = Shape("compound")
@@ -2549,7 +2469,6 @@ Changes since Python 3.0 @@ -2774,7 +2694,6 @@ Changes since Python 3.0
.. doctest:: .. doctest::

View File

@ -2,10 +2,10 @@
Makefile.pre.in | 7 +++++++ Makefile.pre.in | 7 +++++++
1 file changed, 7 insertions(+) 1 file changed, 7 insertions(+)
Index: Python-3.12.0b1/Makefile.pre.in Index: Python-3.12.0rc1/Makefile.pre.in
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Makefile.pre.in --- Python-3.12.0rc1.orig/Makefile.pre.in
+++ Python-3.12.0b1/Makefile.pre.in +++ Python-3.12.0rc1/Makefile.pre.in
@@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ @@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
$(DTRACE_OBJS) \ $(DTRACE_OBJS) \
$(srcdir)/Modules/getbuildinfo.c $(srcdir)/Modules/getbuildinfo.c

View File

@ -1,7 +1,7 @@
Index: Python-3.12.0b1/Lib/site.py Index: Python-3.12.0rc1/Lib/site.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/site.py --- Python-3.12.0rc1.orig/Lib/site.py
+++ Python-3.12.0b1/Lib/site.py +++ Python-3.12.0rc1/Lib/site.py
@@ -76,7 +76,7 @@ import _sitebuiltins @@ -76,7 +76,7 @@ import _sitebuiltins
import io import io

View File

@ -2,10 +2,10 @@
Lib/test/test_posix.py | 2 +- Lib/test/test_posix.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
Index: Python-3.12.0b1/Lib/test/test_posix.py Index: Python-3.12.0rc1/Lib/test/test_posix.py
=================================================================== ===================================================================
--- Python-3.12.0b1.orig/Lib/test/test_posix.py --- Python-3.12.0rc1.orig/Lib/test/test_posix.py
+++ Python-3.12.0b1/Lib/test/test_posix.py +++ Python-3.12.0rc1/Lib/test/test_posix.py
@@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase): @@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase):
def test_posix_fadvise(self): def test_posix_fadvise(self):
fd = os.open(os_helper.TESTFN, os.O_RDONLY) fd = os.open(os_helper.TESTFN, os.O_RDONLY)

View File

@ -1,3 +1,138 @@
-------------------------------------------------------------------
Mon Aug 7 07:31:27 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
- Refresh all patches
- Drop Revert-gh105127-left-tests.patch, in upstream now
- Update to 3.12.0rc1:
- Reverted the :mod:`email.utils` security improvement change
released in 3.12beta4 that unintentionally caused
:mod:`email.utils.getaddresses` to fail to parse email addresses
with a comma in the quoted name field. See :gh:`106669`.
- Start initializing ob_digit during creation of
:c:type:`PyLongObject` objects. Patch by Illia Volochii.
- Increase C recursion limit for functions other than the main
interpreter from 800 to 1500. This should allow functions like
list.__repr__ and json.dumps to handle all the inputs that they
could prior to 3.12
- Fix potential unaligned memory access on C APIs involving returned
sequences of char * pointers within the :mod:`grp` and
:mod:`socket` modules. These were revealed using a
-fsaniziter=alignment build on ARM macOS. Patch by Christopher
Chavez.
- Add the exception as the third argument to PY_UNIND callbacks in
sys.monitoring. This makes the PY_UNWIND callback consistent with
the other exception hanlding callbacks.
- Raise a ValueError when a monitoring callback funtion returns
DISABLE for events that cannot be disabled locally.
- Add a RERAISE event to sys.monitoring, which occurs when an
exception is reraised, either explicitly by a plain raise
statement, or implicitly in an except or finally block.
- Unsupported modules now always fail to be imported.
- Fix classmethod-style :func:`super` method calls (i.e., where the
second argument to :func:`super`, or the implied second argument
drawn from self/cls in the case of zero-arg super, is a type) when
the target of the call is not a classmethod.
- Python no longer crashes due an infrequent race when initialzing
per-interpreter interned strings. The crash would manifest when
the interpreter was finalized.
- Python no longer crashes due to an infrequent race in setting
Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
(both deprecated), when simultaneously initializing two isolated
subinterpreters. Now they are only set during runtime
initialization.
- Fix a segmentation fault caused by a use-after-free bug in
frame_dealloc when the trashcan delays the deallocation of a
PyFrameObject.
- No longer suppress arbitrary errors in the __annotations__ getter
and setter in the type and module types.
- Propagate frozen_modules to multiprocessing spawned process
interpreters.
- Prevent out-of-bounds memory access during mmap.find() calls.
- Seems that in some conditions, OpenSSL will return
SSL_ERROR_SYSCALL instead of SSL_ERROR_SSL when a certification
verification has failed, but the error parameters will still
contain ERR_LIB_SSL and SSL_R_CERTIFICATE_VERIFY_FAILED. We are
now detecting this situation and raising the appropiate
ssl.SSLCertVerificationError. Patch by Pablo Galindo
- Fix :func:`types.get_original_bases` to only return
:attr:`!__orig_bases__` if it is present on cls directly. Patch by
James Hilton-Balfe.
- Prevent memory leak and use-after-free when using pointers to
pointers with ctypes
- Make :func:`gettext.pgettext` search plural definitions when
translation is not found.
- Document behavior of :func:`shutil.disk_usage` for non-mounted
filesystems on Unix.
- Do not report MultipartInvariantViolationDefect defect when the
:class:`email.parser.Parser` class is used to parse emails with
headersonly=True.
- Fix invalid result from :meth:`PurePath.relative_to` method when
attempting to walk a ".." segment in other with walk_up enabled. A
:exc:`ValueError` exception is now raised in this case.
- Fix potential missing NULL check of d2i_SSL_SESSION result in
_ssl.c.
- Update the bundled copy of pip to version 23.2.1.
- Fixed several bugs in zipfile.Path, including: in Path.match`,
Windows separators are no longer honored (and never were meant to
be); Fixed ``name/suffix/suffixes/stem operations when no filename
is present and the Path is not at the root of the zipfile;
Reworked glob for performance and more correct matching behavior.
- Add __copy__ and __deepcopy__ in :mod:`enum`
- Revert a change to :func:`colorsys.rgb_to_hls` that caused
division by zero for certain almost-white inputs. Patch by Terry
Jan Reedy.
- Instances of :class:`typing.TypeVar`, :class:`typing.ParamSpec`,
:class:`typing.ParamSpecArgs`, :class:`typing.ParamSpecKwargs`,
and :class:`typing.TypeVarTuple` once again support weak
references, fixing a regression introduced in Python 3.12.0 beta
1. Patch by Jelle Zijlstra.
- Detect possible memory allocation failure in the libtommath
function :c:func:`mp_init` used by the _tkinter module.
- Fix crash when calling repr with a manually constructed SignalDict
object. Patch by Charlie Zhao.
- Change the default return value of
:meth:`http.client.HTTPConnection.get_proxy_response_headers` to
be None and not {}.
- Ensure gettext(msg) retrieve translations even if a plural form
exists. In other words: gettext(msg) == ngettext(msg, '', 1).
- Add documentation for :c:type:`PyInterpreterConfig` and
:c:func:`Py_NewInterpreterFromConfig`. Also clarify some of the
nearby docs relative to per-interpreter GIL.
- Document the :mod:`curses` module variables :const:`~curses.LINES`
and :const:`~curses.COLS`.
- Add a number of standard external names to nitpick_ignore.
- Add documentation on how to localize the :mod:`argparse` module.
- test_logging: Fix test_udp_reconnection() by increasing the
timeout from 100 ms to 5 minutes (LONG_TIMEOUT). Patch by Victor
Stinner.
- test_capi: Fix test_no_FatalError_infinite_loop() to no longer
write a coredump, by using test.support.SuppressCrashReport. Patch
by Victor Stinner.
- Avoid creating a reference to the test object in
:meth:`~unittest.TestResult.collectedDurations`.
- Moved tests for zipfile.Path into Lib/test/test_zipfile/_path.
Made zipfile._path a package.
- Check for linux/limits.h before including it in
Modules/posixmodule.c.
- Detect MPI compilers in :file:`configure`.
- Add experimental wasi-threads support. Patch by Takashi Yamamoto.
- Update Windows build to use OpenSSL 3.0.9
- Update macOS installer to use OpenSSL 3.0.9.
- Fix bugs in the Argument Clinic destination <name> clear command;
the destination buffers would never be cleared, and the
destination directive parser would simply continue to the fault
handler after processing the command. Patch by Erlend E. Aasland.
- freeze now fetches CONFIG_ARGS from the original CPython instance
the Makefile uses to call utility scripts. Patch by Ijtaba
Hussain.
- :c:func:`PyModule_AddObjectRef` is now only available in the
limited API version 3.10 or later.
-------------------------------------------------------------------
Fri Aug 4 06:37:41 UTC 2023 - Dirk Müller <dmueller@suse.com>
- add externally_managed.in to label this build as PEP-668 managed
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Aug 3 14:13:30 UTC 2023 - Matej Cepl <mcepl@suse.com> Thu Aug 3 14:13:30 UTC 2023 - Matej Cepl <mcepl@suse.com>

View File

@ -105,7 +105,7 @@
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so %define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
%bcond_without profileopt %bcond_without profileopt
Name: %{python_pkg_name}%{psuffix} Name: %{python_pkg_name}%{psuffix}
Version: 3.12.0b4 Version: 3.12.0rc1
Release: 0 Release: 0
Summary: Python 3 Interpreter Summary: Python 3 Interpreter
License: Python-2.0 License: Python-2.0
@ -114,6 +114,7 @@ Source0: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.ta
Source1: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.tar.xz.asc Source1: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.tar.xz.asc
Source2: baselibs.conf Source2: baselibs.conf
Source3: README.SUSE Source3: README.SUSE
Source4: externally_managed.in
Source7: macros.python3 Source7: macros.python3
Source8: import_failed.py Source8: import_failed.py
Source9: import_failed.map Source9: import_failed.map
@ -162,9 +163,6 @@ Patch34: skip-test_pyobject_freed_is_freed.patch
# PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com # PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com
# remove duplicate link targets and make documentation with old Sphinx in SLE # remove duplicate link targets and make documentation with old Sphinx in SLE
Patch35: fix_configure_rst.patch Patch35: fix_configure_rst.patch
# PATCH-FIX-UPSTREAM Revert-gh105127-left-tests.patch bsc#1210638 mcepl@suse.com
# Partially revert previous patch
Patch41: Revert-gh105127-left-tests.patch
BuildRequires: autoconf-archive BuildRequires: autoconf-archive
BuildRequires: automake BuildRequires: automake
BuildRequires: fdupes BuildRequires: fdupes
@ -433,7 +431,6 @@ other applications.
%patch34 -p1 %patch34 -p1
# %%endif # %%endif
%patch35 -p1 %patch35 -p1
%patch41 -p1
# drop Autoconf version requirement # drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
@ -707,6 +704,9 @@ rm %{buildroot}%{_libdir}/libpython3.so
rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc
%endif %endif
# PEP-0668 mark this as a distro maintained python
sed -e 's,__PYTHONPREFIX__,%{python_pkg_name},' -e 's,__PYTHON__,python%{python_version},' < %{SOURCE4} > %{buildroot}%{sitedir}/EXTERNALLY-MANAGED
# link shared library instead of static library that tools expect # link shared library instead of static library that tools expect
ln -s ../../libpython%{python_abi}.so %{buildroot}%{_libdir}/python%{python_version}/config-%{python_abi}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}/libpython%{python_abi}.so ln -s ../../libpython%{python_abi}.so %{buildroot}%{_libdir}/python%{python_version}/config-%{python_abi}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}/libpython%{python_abi}.so
@ -902,6 +902,8 @@ echo %{sitedir}/_import_failed > %{buildroot}/%{sitedir}/site-packages/zzzz-impo
%{_mandir}/man1/python3.1%{?ext_man} %{_mandir}/man1/python3.1%{?ext_man}
%endif %endif
%{_mandir}/man1/python%{python_version}.1%{?ext_man} %{_mandir}/man1/python%{python_version}.1%{?ext_man}
# PEP-0668
%{sitedir}/EXTERNALLY-MANAGED
# license text, not a doc because the code can use it at run-time # license text, not a doc because the code can use it at run-time
%{sitedir}/LICENSE.txt %{sitedir}/LICENSE.txt
# RPM macros # RPM macros

View File

@ -2,8 +2,10 @@
Lib/test/test_capi/test_mem.py | 1 + Lib/test/test_capi/test_mem.py | 1 +
1 file changed, 1 insertion(+) 1 file changed, 1 insertion(+)
--- a/Lib/test/test_capi/test_mem.py Index: Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
+++ b/Lib/test/test_capi/test_mem.py ===================================================================
--- Python-3.12.0rc1.orig/Lib/test/test_capi/test_mem.py
+++ Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
@@ -110,6 +110,7 @@ class PyMemDebugTests(unittest.TestCase) @@ -110,6 +110,7 @@ class PyMemDebugTests(unittest.TestCase)
def test_pyobject_forbidden_bytes_is_freed(self): def test_pyobject_forbidden_bytes_is_freed(self):
self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed') self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed')

View File

@ -2,8 +2,10 @@
Lib/test/test_subprocess.py | 3 ++- Lib/test/test_subprocess.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+), 1 deletion(-)
--- a/Lib/test/test_subprocess.py Index: Python-3.12.0rc1/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py ===================================================================
--- Python-3.12.0rc1.orig/Lib/test/test_subprocess.py
+++ Python-3.12.0rc1/Lib/test/test_subprocess.py
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase): @@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase):
"time.sleep(3600)"], "time.sleep(3600)"],
# Some heavily loaded buildbots (sparc Debian 3.x) require # Some heavily loaded buildbots (sparc Debian 3.x) require