From a72e68dd095e49700b702c6b183cc09d30ba6cf4 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Mon, 9 Jun 2014 15:28:56 -0400 Subject: [PATCH] Revert "Use a different naming scheme, per Enrico's suggestion." This reverts commit fff454fa4bde75ca3554fc4b22cfcad6f36b026d. Revert "Per a suggestion of JMarc's, first write the saved file to a" This reverts commit 094129f804ad6f81de833d8957db42d0991b6882. --- src/Buffer.cpp | 65 +++++++++++++------------------------------------- status.21x | 3 --- 2 files changed, 17 insertions(+), 51 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 867eddd362..ab2164b82b 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1276,42 +1276,12 @@ bool Buffer::save() const // We don't need autosaves in the immediate future. (Asger) resetAutosaveTimers(); - // if the file does not yet exist, none of the backup activity - // that follows is necessary - if (!fileName().exists()) - return writeFile(fileName()); - - // we first write the file to a new name, then move it to its - // proper location once that has been done successfully. that - // way we preserve the original file if something goes wrong. - string const savepath = fileName().onlyPath().absFileName(); - int fnum = 1; - string const fname = fileName().onlyFileName(); - string savename = "tmp-" + convert(fnum) + "-" + fname; - FileName savefile(addName(savepath, savename)); - while (savefile.exists()) { - // surely that is enough tries? - if (fnum > 100) { - Alert::error(_("Write failure"), - bformat(_("Cannot find temporary filename for:\n %1$s.\n" - "Even %2$s exists!"), - from_utf8(fileName().absFileName()), - from_utf8(savefile.absFileName()))); - return false; - } - fnum += 1; - savename = "tmp-" + convert(fnum) + "-" + fname; - savefile.set(addName(savepath, savename)); - } - - LYXERR(Debug::FILES, "Saving to " << savefile.absFileName()); - if (!writeFile(savefile)) - return false; + FileName backupName; + bool madeBackup = false; - // we will set this to false if we fail - bool made_backup = true; - if (lyxrc.make_backup) { - FileName backupName(absFileName() + '~'); + // make a backup if the file already exists + if (lyxrc.make_backup && fileName().exists()) { + backupName = FileName(absFileName() + '~'); if (!lyxrc.backupdir_path.empty()) { string const mangledName = subst(subst(backupName.absFileName(), '/', '!'), ':', '!'); @@ -1321,11 +1291,12 @@ bool Buffer::save() const // Except file is symlink do not copy because of #6587. // Hard links have bad luck. - made_backup = fileName().isSymLink() ? - fileName().copyTo(backupName): - fileName().moveTo(backupName); + if (fileName().isSymLink()) + madeBackup = fileName().copyTo(backupName); + else + madeBackup = fileName().moveTo(backupName); - if (!made_backup) { + if (!madeBackup) { Alert::error(_("Backup failure"), bformat(_("Cannot create backup file %1$s.\n" "Please check whether the directory exists and is writable."), @@ -1333,18 +1304,16 @@ bool Buffer::save() const //LYXERR(Debug::DEBUG, "Fs error: " << fe.what()); } } - - if (made_backup && savefile.moveTo(fileName())) { + + if (writeFile(d->filename)) { markClean(); return true; + } else { + // Saving failed, so backup is not backup + if (madeBackup) + backupName.moveTo(d->filename); + return false; } - // else - Alert::error(_("Write failure"), - bformat(_("Cannot move saved file to:\n %1$s.\n" - "But the file has successfully been saved as:\n %2$s."), - from_utf8(fileName().absFileName()), - from_utf8(savefile.absFileName()))); - return false; } diff --git a/status.21x b/status.21x index 9b17a54e7d..f3cf3a73cc 100644 --- a/status.21x +++ b/status.21x @@ -28,9 +28,6 @@ What's new * DOCUMENT INPUT/OUTPUT -- When saving a file, LyX now writes the saved file first to a temporary - filename (tmp-oldfile.lyx) and only deletes the original file once the - new file has successfully been written. - We now flush the output stream more frequently, as a temporary measure to help us gather information about the crash mentioned above. -- 2.39.5