diff -r 3ae2cd85a908 Lib/idlelib/IOBinding.py --- a/Lib/idlelib/IOBinding.py Sun Mar 09 11:18:16 2014 +0100 +++ b/Lib/idlelib/IOBinding.py Tue Mar 25 18:12:10 2014 +0530 @@ -148,16 +148,22 @@ self.filename_change_hook = hook filename = None + file_timestamp = None dirname = None def set_filename(self, filename): if filename and os.path.isdir(filename): self.filename = None + self.file_timestamp = None self.dirname = filename else: self.filename = filename + if filename is not None: + self.file_timestamp = os.stat(filename).st_mtime + else: + self.file_timestamp = None self.dirname = None - self.set_saved(1) + self.set_saved(True) if self.filename_change_hook: self.filename_change_hook() @@ -339,7 +345,23 @@ if not self.filename: self.save_as(event) else: + # Check the time of most recent content modification so the + # user doesn't accidentally overwrite a newer version of the file. + if self.file_timestamp != os.stat(self.filename).st_mtime: + dlg = tkMessageBox.Message( + master=self.text, + title="File has changed", + message=( + "The file has changed since reading it!\n\n" + "Do you really want to overwrite it?"), + default=tkMessageBox.NO, + icon=tkMessageBox.WARNING, + type=tkMessageBox.YESNO) + res = dlg.show() + if not self.text.tk.getboolean(str(res)): + return if self.writefile(self.filename): + self.file_timestamp = os.stat(self.filename).st_mtime self.set_saved(True) try: self.editwin.store_file_breaks() @@ -353,7 +375,7 @@ if filename: if self.writefile(filename): self.set_filename(filename) - self.set_saved(1) + self.set_saved(True) try: self.editwin.store_file_breaks() except AttributeError: