Index: Lib/idlelib/IOBinding.py =================================================================== --- Lib/idlelib/IOBinding.py (revision 74433) +++ Lib/idlelib/IOBinding.py (working copy) @@ -182,14 +182,20 @@ 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) if self.filename_change_hook: @@ -338,7 +344,24 @@ 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(1) try: self.editwin.store_file_breaks()