summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore.cpp
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-12-20 11:31:30 +0200
committerKatja Marttila <katja.marttila@qt.io>2020-12-22 08:38:36 +0200
commita606c9915b8ff1d6001a83aa350400d6286706ff (patch)
tree33fba20f96caf98be8d42382763d0f93f92a9366 /src/libs/installer/packagemanagercore.cpp
parentb7df5571e0707f53716fa51d426d5ec31d36af43 (diff)
Introduce ForcedUpdate element for component
Setting ForcedUpdate for component will cause a mandatory update for component if it is installed. Component must be updated before any other component can be updated/installed/removed. Essential components are updated at the same time with ForcedUpdate. Task-number: QTIFW-1565 Change-Id: I6af07fba222371e8cd161d1fec65301450077d86 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore.cpp')
-rw-r--r--src/libs/installer/packagemanagercore.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index e4b0e1689..8e205b7d7 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -1551,12 +1551,18 @@ bool PackageManagerCore::fetchPackagesTree(const PackagesList &packages, const L
return false;
if (success && isPackageManager()) {
foreach (Package *const update, packages) {
- if (update->data(scEssential, scFalse).toString().toLower() == scTrue) {
+ bool essentialUpdate = (update->data(scEssential, scFalse).toString().toLower() == scTrue);
+ bool forcedUpdate = (update->data(scForcedUpdate, scFalse).toString().toLower() == scTrue);
+ if (essentialUpdate || forcedUpdate) {
const QString name = update->data(scName).toString();
- if (!installedPackages.contains(name)) {
+ // 'Essential' package not installed, install.
+ if (essentialUpdate && !installedPackages.contains(name)) {
success = false;
- continue; // unusual, the maintenance tool should always be available
+ continue;
}
+ // 'Forced update' package not installed, no update needed
+ if (forcedUpdate && !installedPackages.contains(name))
+ continue;
const LocalPackage localPackage = installedPackages.value(name);
const QString updateVersion = update->data(scVersion).toString();
@@ -1568,7 +1574,7 @@ bool PackageManagerCore::fetchPackagesTree(const PackagesList &packages, const L
continue; // remote release date equals or is less than the installed maintenance tool
success = false;
- break; // we found a newer version of the maintenance tool
+ break; // we found a newer version of the forced/essential update package
}
}
@@ -2290,7 +2296,8 @@ PackageManagerCore::Status PackageManagerCore::updateComponentsSilently(const QS
// restart installer and install rest of the updates.
bool essentialUpdatesFound = false;
foreach (Component *component, componentList) {
- if (component->value(scEssential, scFalse).toLower() == scTrue)
+ if ((component->value(scEssential, scFalse).toLower() == scTrue)
+ || component->isForcedUpdate())
essentialUpdatesFound = true;
}
if (!essentialUpdatesFound) {
@@ -3634,8 +3641,10 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const
if (localPackage.lastUpdateDate > updateDate)
continue;
- if (update->data(scEssential, scFalse).toString().toLower() == scTrue)
+ if (update->data(scEssential, scFalse).toString().toLower() == scTrue ||
+ update->data(scForcedUpdate, scFalse).toString().toLower() == scTrue) {
setFoundEssentialUpdate(true);
+ }
// this is not a dependency, it is a real update
components.insert(name, d->m_updaterComponentsDeps.takeLast());
@@ -3693,13 +3702,14 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const
component->setCheckable(false);
component->setSelectable(false);
- if (component->value(scEssential, scFalse).toLower() == scFalse) {
+ if ((component->value(scEssential, scFalse).toLower() == scTrue)
+ || (component->value(scForcedUpdate, scFalse).toLower() == scTrue)) {
+ // essential updates are enabled, still not checkable but checked
+ component->setEnabled(true);
+ } else {
// non essential updates are disabled, not checkable and unchecked
component->setEnabled(false);
component->setCheckState(Qt::Unchecked);
- } else {
- // essential updates are enabled, still not checkable but checked
- component->setEnabled(true);
}
}
}