Skip to content

Commit fe3e6d1

Browse files
ZackerySpytzgpolopriyapappachan
committed
bpo-6699: IDLE: Warn the user if a file will be overwritten when saving
Co-Authored-By: Guilherme Polo <ggpolo@gmail.com> Co-Authored-By: Priya Pappachan <priyapappachan010@gmail.com>
1 parent 7772b1a commit fe3e6d1

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

Lib/idlelib/iomenu.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,20 @@ def set_filename_change_hook(self, hook):
148148
self.filename_change_hook = hook
149149

150150
filename = None
151+
file_timestamp = None
151152
dirname = None
152153

153154
def set_filename(self, filename):
154155
if filename and os.path.isdir(filename):
155156
self.filename = None
157+
self.file_timestamp = None
156158
self.dirname = filename
157159
else:
158160
self.filename = filename
161+
if filename is not None:
162+
self.file_timestamp = os.stat(filename).st_mtime
163+
else:
164+
self.file_timestamp = None
159165
self.dirname = None
160166
self.set_saved(1)
161167
if self.filename_change_hook:
@@ -339,7 +345,21 @@ def save(self, event):
339345
if not self.filename:
340346
self.save_as(event)
341347
else:
348+
# Check the time of most recent content modification so the
349+
# user doesn't accidentally overwrite a newer version of the file.
350+
if self.file_timestamp != os.stat(self.filename).st_mtime:
351+
confirm = tkMessageBox.askokcancel(
352+
title="File has changed",
353+
message=(
354+
"The file has changed on disk since reading it!\n\n"
355+
"Do you really want to overwrite it?"),
356+
default=tkMessageBox.CANCEL,
357+
parent=self.text)
358+
if not confirm:
359+
return
360+
342361
if self.writefile(self.filename):
362+
self.file_timestamp = os.stat(self.filename).st_mtime
343363
self.set_saved(True)
344364
try:
345365
self.editwin.store_file_breaks()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Warn the user if a file will be overwritten when saving.

0 commit comments

Comments
 (0)