Skip to content

Commit 8d1aa69

Browse files
generatedunixname1734921407115435meta-codesync[bot]
authored andcommitted
Sync pre-release CPython 3.15 branch from GitHub (2026-06-07)
Summary: Imported python/cpython `3.15.0b2+dev` from upstream rev [`a642d1a`](https://www.github.com/python/cpython/commit/a642d1ab38cb3199c16898875e86cd13a99b687a) (committed 2026-06-07 13:27:26+00:00). # Commit Info - Base: (`3.15.0b2+dev`) - [`934ae3e`](https://www.github.com/python/cpython/commit/934ae3ed153bc01ac44d43c5ad0fc3e01027f98f) (commit date: 2026-06-06 02:46:55+00:00) - Imported: (`3.15.0b2+dev`) - [`a642d1a`](https://www.github.com/python/cpython/commit/a642d1ab38cb3199c16898875e86cd13a99b687a) (commit date: 2026-06-07 13:27:26+00:00) # Noteworthy file changes - Low-signal files (5 added) (NEWS.d, docs, .github) Complete list of added/removed files: https://www.internalfb.com/intern/everpaste/?color=0&handle=GFcsVCmNtdvoePYFACDOUv0SJ08sbr0LAAAz Differential Revision: D107809662 fbshipit-source-id: d7f7966363b280b415d6f37008df326281c75b0f
1 parent ac91451 commit 8d1aa69

17 files changed

Lines changed: 529 additions & 145 deletions

Doc/c-api/long.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
7171
on failure.
7272
7373
74+
.. c:function:: PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
75+
76+
Return a new :c:type:`PyLongObject` object from a C :c:expr:`unsigned long long`,
77+
or ``NULL`` on failure.
78+
79+
7480
.. c:function:: PyObject* PyLong_FromInt32(int32_t value)
7581
PyObject* PyLong_FromInt64(int64_t value)
7682
@@ -81,12 +87,6 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
8187
.. versionadded:: 3.14
8288
8389
84-
.. c:function:: PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
85-
86-
Return a new :c:type:`PyLongObject` object from a C :c:expr:`unsigned long long`,
87-
or ``NULL`` on failure.
88-
89-
9090
.. c:function:: PyObject* PyLong_FromUInt32(uint32_t value)
9191
PyObject* PyLong_FromUInt64(uint64_t value)
9292

Doc/library/importlib.resources.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,6 @@ For all the following functions:
240240

241241
.. versionchanged:: 3.13
242242
Multiple *path_names* are accepted.
243-
*encoding* and *errors* must be given as keyword arguments.
244243

245244

246245
.. function:: is_resource(anchor, *path_names)

Lib/idlelib/iomenu.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def set_filename_change_hook(self, hook):
6161
self.filename_change_hook = hook
6262

6363
filename = None
64+
file_timestamp = None
6465
dirname = None
6566

6667
def set_filename(self, filename):
@@ -127,6 +128,7 @@ def loadfile(self, filename):
127128
chars = f.read()
128129
fileencoding = f.encoding
129130
eol_convention = f.newlines
131+
file_timestamp = self.getmtime(filename)
130132
converted = False
131133
except (UnicodeDecodeError, SyntaxError):
132134
# Wait for the editor window to appear
@@ -142,6 +144,7 @@ def loadfile(self, filename):
142144
chars = f.read()
143145
fileencoding = f.encoding
144146
eol_convention = f.newlines
147+
file_timestamp = self.getmtime(filename)
145148
converted = True
146149
except OSError as err:
147150
messagebox.showerror("I/O Error", str(err), parent=self.text)
@@ -170,6 +173,7 @@ def loadfile(self, filename):
170173
self.text.insert("1.0", chars)
171174
self.reset_undo()
172175
self.set_filename(filename)
176+
self.file_timestamp = file_timestamp
173177
if converted:
174178
# We need to save the conversion results first
175179
# before being able to execute the code
@@ -206,7 +210,26 @@ def save(self, event):
206210
if not self.filename:
207211
self.save_as(event)
208212
else:
213+
# Check the time of most recent content modification so the
214+
# user doesn't accidentally overwrite a newer version of the file.
215+
try:
216+
file_timestamp = self.getmtime(self.filename)
217+
except OSError:
218+
pass
219+
else:
220+
if self.file_timestamp != file_timestamp:
221+
confirm = messagebox.askokcancel(
222+
title="File has changed",
223+
message=(
224+
"The file has changed on disk since reading it!\n\n"
225+
"Do you really want to overwrite it?"),
226+
default=messagebox.CANCEL,
227+
parent=self.text)
228+
if not confirm:
229+
return "break"
230+
209231
if self.writefile(self.filename):
232+
self.file_timestamp = self.getmtime(self.filename)
210233
self.set_saved(True)
211234
try:
212235
self.editwin.store_file_breaks()
@@ -219,6 +242,7 @@ def save_as(self, event):
219242
filename = self.asksavefile()
220243
if filename:
221244
if self.writefile(filename):
245+
self.file_timestamp = self.getmtime(filename)
222246
self.set_filename(filename)
223247
self.set_saved(1)
224248
try:
@@ -251,6 +275,9 @@ def writefile(self, filename):
251275
parent=self.text)
252276
return False
253277

278+
def getmtime(self, filename):
279+
return os.stat(filename).st_mtime
280+
254281
def fixnewlines(self):
255282
"""Return text with os eols.
256283

0 commit comments

Comments
 (0)