summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-01-14 13:38:51 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-01-20 09:06:52 +0200
commitc5a8076439d48ed4575306e73ad401b6e0575012 (patch)
treeaeb471aa9db02ecbed7d4c598cb42b3eadaf617b
parentfa53b14796babd4ec4b44a05fa7724315a18bd63 (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>
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp25
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;
}
}