commit 8cbf1c7cecf2c7790f560c3d2b6c80b26c1c0f4f
Author: Richard Kimberly Heck <[email protected]>
Date:   Wed Jan 16 11:13:53 2019 -0500

    Rename emergency file when it is kept.
    
    Otherwise, we will ask about it again next time, when the file
    may have changed. Also, if we crash again, we'll over-write that
    file, which we may not want to do.
    
    See bug #11464.
    
    (cherry picked from commit b804e8851c33b68caa5057e809a12333741dfe2e)
---
 src/Buffer.cpp |   26 ++++++++++++++++++++++++++
 status.23x     |    2 ++
 2 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 460fc91..3130c23 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -4771,6 +4771,32 @@ Buffer::ReadStatus Buffer::loadEmergency()
                                _("&Remove"), _("&Keep"));
                if (del_emerg == 0)
                        emergencyFile.removeFile();
+               else {
+                       // See bug #11464
+                       FileName newname;
+                       string const ename = emergencyFile.absFileName();
+                       bool noname = true;
+                       // Surely we can find one in 100 tries?
+                       for (int i = 1; i < 100; ++i) {
+                               newname.set(ename + to_string(i) + ".lyx");
+                               if (!newname.exists()) {
+                                       noname = false;
+                                       break;
+                               }
+                       }
+                       if (!noname) {
+                               // renameTo returns true on success. So 
inverting that
+                               // will give us true if we fail.
+                               noname = !emergencyFile.renameTo(newname);
+                       }
+                       if (noname) {
+                               Alert::warning(_("Can't rename emergency 
file!"),
+                                       _("LyX was unable to rename the 
emergency file. "
+                                         "You should do so manually. 
Otherwise, you will be"
+                                         "asked about it again the next time 
you try to load"
+                                         "this file, and may over-write your 
own work."));
+                       }
+               }
                return ReadOriginal;
        }
 
diff --git a/status.23x b/status.23x
index 7032895..836975a 100644
--- a/status.23x
+++ b/status.23x
@@ -88,6 +88,8 @@ What's new
 
 * USER INTERFACE
 
+- Rename emergency file when user wants to save it (bug 11464).
+
 - Fix reloading of local layout file (bug 11120).
 
 - Check for dirty hidden child documents when closing (bug 11405).

Reply via email to