From 5cfbde0bb73e66385b0f714ed0e9f0b7b69ba830 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 31 May 2021 22:22:50 -0400 Subject: [PATCH] Retain file creation time when saving database (#6576) * Fix #6028 --- src/core/Database.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/core/Database.cpp b/src/core/Database.cpp index be9adfa45..f13c00796 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -272,6 +272,11 @@ bool Database::saveAs(const QString& filePath, QString* error, bool atomic, bool bool Database::performSave(const QString& filePath, QString* error, bool atomic, bool backup) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + QFileInfo info(filePath); + auto createTime = info.exists() ? info.birthTime() : QDateTime::currentDateTime(); +#endif + if (atomic) { QSaveFile saveFile(filePath); if (saveFile.open(QIODevice::WriteOnly)) { @@ -284,6 +289,11 @@ bool Database::performSave(const QString& filePath, QString* error, bool atomic, backupDatabase(filePath); } +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Retain orginal creation time + saveFile.setFileTime(createTime, QFile::FileBirthTime); +#endif + if (saveFile.commit()) { // successfully saved database file return true; @@ -318,6 +328,10 @@ bool Database::performSave(const QString& filePath, QString* error, bool atomic, // successfully saved the database tempFile.setAutoRemove(false); QFile::setPermissions(filePath, perms); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Retain orginal creation time + tempFile.setFileTime(createTime, QFile::FileBirthTime); +#endif return true; } else if (!backup || !restoreDatabase(filePath)) { // Failed to copy new database in place, and