summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/uninstallercalculator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/uninstallercalculator.cpp')
-rw-r--r--src/libs/installer/uninstallercalculator.cpp86
1 files changed, 30 insertions, 56 deletions
diff --git a/src/libs/installer/uninstallercalculator.cpp b/src/libs/installer/uninstallercalculator.cpp
index 36d769207..2f029630f 100644
--- a/src/libs/installer/uninstallercalculator.cpp
+++ b/src/libs/installer/uninstallercalculator.cpp
@@ -30,9 +30,6 @@
#include "component.h"
#include "packagemanagercore.h"
-#include "globals.h"
-
-#include <QDebug>
namespace QInstaller {
@@ -42,13 +39,11 @@ namespace QInstaller {
\internal
*/
-UninstallerCalculator::UninstallerCalculator(const QList<Component *> &installedComponents
- , PackageManagerCore *core
+UninstallerCalculator::UninstallerCalculator(PackageManagerCore *core
, const AutoDependencyHash &autoDependencyComponentHash
, const LocalDependencyHash &localDependencyComponentHash
, const QStringList &localVirtualComponents)
- : m_installedComponents(installedComponents)
- , m_core(core)
+ : m_core(core)
, m_autoDependencyComponentHash(autoDependencyComponentHash)
, m_localDependencyComponentHash(localDependencyComponentHash)
, m_localVirtualComponents(localVirtualComponents)
@@ -60,7 +55,7 @@ QSet<Component *> UninstallerCalculator::componentsToUninstall() const
return m_componentsToUninstall;
}
-void UninstallerCalculator::appendComponentToUninstall(Component *component, const bool reverse)
+void UninstallerCalculator::appendComponentToUninstall(Component *component)
{
if (!component)
return;
@@ -74,29 +69,22 @@ void UninstallerCalculator::appendComponentToUninstall(Component *component, con
Component *depComponent = m_core->componentByName(dependencyComponent);
if (!depComponent)
continue;
- if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent)) {
- appendComponentToUninstall(depComponent, reverse);
+ if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent)
+ && !m_core->orderedComponentsToInstall().contains(depComponent)) {
+ appendComponentToUninstall(depComponent);
insertUninstallReason(depComponent, UninstallerCalculator::Dependent, component->name());
- } else if (reverse && depComponent->isVirtual()) {
- // Remove from uninstall only hidden components, user
- // can select other dependencies manually
- appendComponentToUninstall(depComponent, true);
}
}
}
- if (reverse) {
- m_componentsToUninstall.remove(component);
- } else {
- m_componentsToUninstall.insert(component);
- }
+
+ m_componentsToUninstall.insert(component);
}
-void UninstallerCalculator::appendComponentsToUninstall(const QList<Component*> &components, const bool reverse)
+void UninstallerCalculator::appendComponentsToUninstall(const QList<Component*> &components)
{
- if (components.isEmpty())
- return;
foreach (Component *component, components)
- appendComponentToUninstall(component, reverse);
+ appendComponentToUninstall(component);
+
QList<Component*> autoDependOnList;
// All regular dependees are resolved. Now we are looking for auto depend on components.
for (Component *component : components) {
@@ -108,9 +96,7 @@ void UninstallerCalculator::appendComponentsToUninstall(const QList<Component*>
Component *autoDepComponent = m_core->componentByName(autoDependencyComponent);
if (autoDepComponent && autoDepComponent->isInstalled()) {
// A component requested auto uninstallation, keep it to resolve their dependencies as well.
- if (reverse) {
- autoDependOnList.append(autoDepComponent);
- } else if (!m_componentsToUninstall.contains(autoDepComponent)) {
+ if (!m_componentsToUninstall.contains(autoDepComponent)) {
insertUninstallReason(autoDepComponent, UninstallerCalculator::AutoDependent, component->name());
autoDepComponent->setInstallAction(ComponentModelHelper::AutodependUninstallation);
autoDependOnList.append(autoDepComponent);
@@ -118,15 +104,11 @@ void UninstallerCalculator::appendComponentsToUninstall(const QList<Component*>
}
}
}
+
if (!autoDependOnList.isEmpty())
- appendComponentsToUninstall(autoDependOnList, reverse);
+ appendComponentsToUninstall(autoDependOnList);
else
- appendVirtualComponentsToUninstall(reverse);
-}
-
-void UninstallerCalculator::removeComponentsFromUnInstall(const QList<Component*> &components)
-{
- appendComponentsToUninstall(components, true);
+ appendVirtualComponentsToUninstall();
}
void UninstallerCalculator::insertUninstallReason(Component *component, const UninstallReasonType uninstallReason,
@@ -172,38 +154,30 @@ QString UninstallerCalculator::uninstallReasonReferencedComponent(Component *com
return m_toUninstallComponentIdReasonHash.value(component->name()).second;
}
-void UninstallerCalculator::appendVirtualComponentsToUninstall(const bool reverse)
+void UninstallerCalculator::appendVirtualComponentsToUninstall()
{
QList<Component*> unneededVirtualList;
-
// Check for virtual components without dependees
- if (reverse) {
- for (Component *reverseFromUninstall : qAsConst(m_virtualComponentsForReverse)) {
- if (m_componentsToUninstall.contains(reverseFromUninstall) && (isRequiredVirtualPackage(reverseFromUninstall)))
- unneededVirtualList.append(reverseFromUninstall);
- }
- } else {
- for (const QString &componentName : qAsConst(m_localVirtualComponents)) {
- Component *virtualComponent = m_core->componentByName(componentName, m_core->components(PackageManagerCore::ComponentType::All));
- if (!virtualComponent)
- continue;
+ for (const QString &componentName : qAsConst(m_localVirtualComponents)) {
+ Component *virtualComponent = m_core->componentByName(componentName, m_core->components(PackageManagerCore::ComponentType::All));
+ if (!virtualComponent)
+ continue;
- if (virtualComponent->isInstalled() && !m_componentsToUninstall.contains(virtualComponent)) {
- // Components with auto dependencies were handled in the previous step
- if (!virtualComponent->autoDependencies().isEmpty() || virtualComponent->forcedInstallation())
- continue;
+ if (virtualComponent->isInstalled() && !m_componentsToUninstall.contains(virtualComponent)) {
+ // Components with auto dependencies were handled in the previous step
+ if (!virtualComponent->autoDependencies().isEmpty() || virtualComponent->forcedInstallation())
+ continue;
- if (!isRequiredVirtualPackage(virtualComponent)) {
- unneededVirtualList.append(virtualComponent);
- m_virtualComponentsForReverse.append(virtualComponent);
- insertUninstallReason(virtualComponent, UninstallerCalculator::VirtualDependent);
- }
- }
+ if (!isRequiredVirtualPackage(virtualComponent)) {
+ unneededVirtualList.append(virtualComponent);
+ m_virtualComponentsForReverse.append(virtualComponent);
+ insertUninstallReason(virtualComponent, UninstallerCalculator::VirtualDependent);
+ }
}
}
if (!unneededVirtualList.isEmpty())
- appendComponentsToUninstall(unneededVirtualList, reverse);
+ appendComponentsToUninstall(unneededVirtualList);
}
bool UninstallerCalculator::isRequiredVirtualPackage(Component *component)