From: Richard Kimberly Heck Date: Wed, 16 Jan 2019 16:13:53 +0000 (-0500) Subject: Rename emergency file when it is kept. X-Git-Tag: 2.3.3~36 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=8cbf1c7cecf2c7790f560c3d2b6c80b26c1c0f4f;p=features.git 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) --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 460fc910db..3130c2357f 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 7032895472..836975acb8 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).