diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-14 13:38:51 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-20 09:06:52 +0200 |
commit | c5a8076439d48ed4575306e73ad401b6e0575012 (patch) | |
tree | aeb471aa9db02ecbed7d4c598cb42b3eadaf617b /src/libs/installer/packagemanagercore_p.cpp | |
parent | fa53b14796babd4ec4b44a05fa7724315a18bd63 (diff) |
Fix hard restart of maintenance tool
This was only working when a component containing maintenance tool
replacement was updated. For other 'Essential' and 'ForcedUpdate'
components nothing happened after clicking the restart button.
Task-number: QTIFW-2381
Change-Id: Ie59315b1d7e123af7169dff267ee2e1a4cf6b470
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 18736e587..08e382e7d 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1495,14 +1495,19 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper if (m_core->isInstaller()) registerMaintenanceTool(); writeMaintenanceConfigFiles(); - deferredRename(dataFile + QLatin1String(".new"), dataFile, false); - if (newBinaryWritten) { - const bool restart = replacementExists && isUpdater() && (!statusCanceledOrFailed()) && m_needsHardRestart; + QFile::remove(dataFile); + QFile::rename(dataFile + QLatin1String(".new"), dataFile); + + const bool restart = !statusCanceledOrFailed() && m_needsHardRestart; + qCDebug(QInstaller::lcInstallerInstallLog) << "Maintenance tool hard restart:" + << (restart ? "true." : "false."); + + if (newBinaryWritten) deferredRename(maintenanceToolName() + QLatin1String(".new"), maintenanceToolName(), restart); - qCDebug(QInstaller::lcInstallerInstallLog) << "Maintenance tool restart:" - << (restart ? "true." : "false."); - } + else if (restart) + SelfRestarter::setRestartOnQuit(true); + } catch (const Error &err) { setStatus(PackageManagerCore::Failure); if (gainedAdminRights) @@ -2222,9 +2227,11 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr if (!ok && !ignoreError) throw Error(operation->errorString()); - if (((component->value(scEssential, scFalse) == scTrue) || (component->value(scForcedUpdate, scFalse) == scTrue)) - && !m_core->isCommandLineInstance()) { - m_needsHardRestart = true; + if (!m_core->isCommandLineInstance()) { + if ((component->value(scEssential, scFalse) == scTrue) && !isInstaller()) + m_needsHardRestart = true; + else if ((component->value(scForcedUpdate, scFalse) == scTrue) && isUpdater()) + m_needsHardRestart = true; } } |