summaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2022-11-29 14:19:21 +0200
committerKatja Marttila <katja.marttila@qt.io>2022-12-01 10:19:01 +0200
commit853678f811414e7bef5bbffa5a6e7ffcb1e2fa8f (patch)
tree3200cae0faf6cfaf74e3921ae120edd00f683124 /src/libs
parent7ccada5c9cfaa9916cd73dc9d217670fc9031677 (diff)
Fix replaced removal on update
If component is replaced with a component which is installed as autodependency to other component, the replaced component was not uninstalled on update. Task-number: QTIFW-2887 Change-Id: Ibad04df765191f0e399c6f6020cdf081dba5d803 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp12
-rw-r--r--src/libs/installer/uninstallercalculator.cpp3
2 files changed, 7 insertions, 8 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 129c35d46..d9a35bcb1 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -1931,7 +1931,7 @@ bool PackageManagerCorePrivate::runPackageUpdater()
// There is a replacement, but the replacement is not scheduled for update, keep it as well.
if (m_componentsToReplaceUpdaterMode.contains(name)
- && !m_componentsToReplaceUpdaterMode.value(name).first->updateRequested()) {
+ && !m_installerCalculator->orderedComponentsToInstall().contains(m_componentsToReplaceUpdaterMode.value(name).first)) {
nonRevertedOperations.append(operation);
continue;
}
@@ -3088,12 +3088,10 @@ void PackageManagerCorePrivate::calculateUninstallComponents()
foreach (Component* component, m_core->components(PackageManagerCore::ComponentType::Replacements)) {
// Uninstall the component if replacement is selected for install or update
QPair<Component*, Component*> comp = componentsToReplace().value(component->name());
- if (comp.first) {
- if (comp.first->isSelectedForInstallation() || comp.first->updateRequested()) {
- uninstallerCalculator()->insertUninstallReason(component,
- UninstallerCalculator::Replaced, comp.first->name());
- selectedComponentsToUninstall.append(comp.second);
- }
+ if (comp.first && m_installerCalculator->orderedComponentsToInstall().contains(comp.first)) {
+ uninstallerCalculator()->insertUninstallReason(component,
+ UninstallerCalculator::Replaced, comp.first->name());
+ selectedComponentsToUninstall.append(comp.second);
}
}
foreach (Component *component, m_core->components(PackageManagerCore::ComponentType::AllNoReplacements)) {
diff --git a/src/libs/installer/uninstallercalculator.cpp b/src/libs/installer/uninstallercalculator.cpp
index 4c07d81e3..2f029630f 100644
--- a/src/libs/installer/uninstallercalculator.cpp
+++ b/src/libs/installer/uninstallercalculator.cpp
@@ -69,7 +69,8 @@ void UninstallerCalculator::appendComponentToUninstall(Component *component)
Component *depComponent = m_core->componentByName(dependencyComponent);
if (!depComponent)
continue;
- if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent)) {
+ if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent)
+ && !m_core->orderedComponentsToInstall().contains(depComponent)) {
appendComponentToUninstall(depComponent);
insertUninstallReason(depComponent, UninstallerCalculator::Dependent, component->name());
}