From fafd4d0a17022517479abd1c87a1f53b94b7bb63 Mon Sep 17 00:00:00 2001 From: Marek Niepieklo Date: Mon, 8 Nov 2021 11:33:16 +0100 Subject: [PATCH] [CP-815] Incorrect handling of versions during restore Fixed comparison of OS and backup file versions --- .../service-desktop/BackupRestore.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/module-services/service-desktop/BackupRestore.cpp b/module-services/service-desktop/BackupRestore.cpp index 2fb97630e3c7de3838c7d9cfb3883e005467b0c3..5774106131ffd855bed47ba5b723d286aa7b1529 100644 --- a/module-services/service-desktop/BackupRestore.cpp +++ b/module-services/service-desktop/BackupRestore.cpp @@ -451,6 +451,7 @@ std::string BackupRestore::ReadVersionFromJsonFile(const std::filesystem::path & bool BackupRestore::CheckBackupVersion(const std::filesystem::path &extractedBackup) { + auto versionOK = true; const auto backupVersion = ReadVersionFromJsonFile(extractedBackup / bkp::backupInfo); if (backupVersion.empty()) { @@ -465,17 +466,28 @@ bool BackupRestore::CheckBackupVersion(const std::filesystem::path &extractedBac return false; } + LOG_DEBUG("Current OS version %s, backup version %s", (currentVersion).c_str(), (backupVersion).c_str()); + auto const currentVersionTokens = utils::split(currentVersion, "."); auto const backupVersionTokens = utils::split(backupVersion, "."); - if (currentVersionTokens[0] < backupVersionTokens[0] || // major version - currentVersionTokens[1] < backupVersionTokens[1]) { // minor version + if (currentVersionTokens[0] < backupVersionTokens[0]) { // major version + versionOK = false; + } + else if (currentVersionTokens[0] == backupVersionTokens[0] && // major version + currentVersionTokens[1] < backupVersionTokens[1]) { // minor version + versionOK = false; + } + + if (!versionOK) { LOG_ERROR( "Current OS version %s older than backup version %s", (currentVersion).c_str(), (backupVersion).c_str()); - return false; + } + else { + LOG_DEBUG("OK to restore backup version %s", (backupVersion).c_str()); } - return true; + return versionOK; } bool BackupRestore::CanRestoreFromBackup(const std::filesystem::path &extractedBackup)