summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/packagemanagercore.cpp')
-rw-r--r--src/libs/installer/packagemanagercore.cpp70
1 files changed, 49 insertions, 21 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index d8e22be40..7687ce13c 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -655,7 +655,7 @@ void PackageManagerCore::calculateUserSelectedComponentsToInstall(const QList<QM
UninstallerCalculator::UninstallReasonType::Replaced);
}
}
- // 2. Component is reseleted for install (tapping checkbox off/on)
+ // 2. Component is reselected for install (tapping checkbox off/on)
else if (installComponent->isSelected() && installComponent->isInstalled()
&& !d->installerCalculator()->orderedComponentsToInstall().contains(installComponent)) {
componentsToInstall.append(installComponent);
@@ -680,6 +680,13 @@ void PackageManagerCore::calculateUserSelectedComponentsToInstall(const QList<QM
d->uninstallerCalculator()->appendComponentsToUninstall(componentsToUnInstall, false);
}
d->uninstallerCalculator()->removeComponentsFromUnInstall(componentsToInstall);
+ if (componentsToUnInstall.isEmpty() && !componentsToInstall.isEmpty()) {
+ // There are no new components to be uninstalled but there
+ // are new components to be installed which might have virtual
+ // dependences to components which are already selected for uninstall.
+ // We need to remove those components from uninstall.
+ d->uninstallerCalculator()->appendVirtualComponentsToUninstall(true);
+ }
d->updateComponentCheckedState();
}
@@ -2406,44 +2413,65 @@ QList<Component*> PackageManagerCore::dependees(const Component *_component) con
}
/*!
- Returns a list of components that depend on \a component. The list can be
- empty. Dependendants are calculated from components which are about to be updated,
- if no update is requested then the dependant is calculated from installed packages.
-
- \note Automatic dependencies are not resolved.
+ Returns true if components which are about to be installed or updated
+ are dependent on \a component.
*/
-QList<Component*> PackageManagerCore::installDependants(const Component *component) const
+bool PackageManagerCore::isDependencyForRequestedComponent(const Component *component) const
{
if (!component)
- return QList<Component *>();
+ return false;
const QList<QInstaller::Component *> availableComponents = components(ComponentType::All);
if (availableComponents.isEmpty())
- return QList<Component *>();
+ return false;
- QList<Component *> dependants;
QString name;
QString version;
- foreach (Component *availableComponent, availableComponents) {
- if (isUpdater() && availableComponent->updateRequested()) {
+ for (Component *availableComponent : availableComponents) {
+ if (!availableComponent) {
+ continue;
+ }
+ // 1. In updater mode, component to be updated might have new dependencies
+ // Check if the dependency is still needed
+ // 2. If component is selected and not installed, check if the dependency is needed
+ if (availableComponent->isSelected()
+ && ((isUpdater() && availableComponent->isInstalled())
+ || (isPackageManager() && !availableComponent->isInstalled()))) {
const QStringList &dependencies = availableComponent->dependencies();
foreach (const QString &dependency, dependencies) {
parseNameAndVersion(dependency, &name, &version);
if (componentMatches(component, name, version)) {
- dependants.append(availableComponent);
+ return true;
}
}
- } else {
- KDUpdater::LocalPackage localPackage = d->m_localPackageHub->packageInfo(availableComponent->name());
- foreach (const QString &dependency, localPackage.dependencies) {
- parseNameAndVersion(dependency, &name, &version);
- if (componentMatches(component, name, version)) {
- dependants.append(availableComponent);
- }
+ }
+ }
+ return false;
+}
+
+
+/*!
+ Returns a list of local components which are dependent on \a component.
+*/
+QStringList PackageManagerCore::localDependenciesToComponent(const Component *component) const
+{
+ if (!component)
+ return QStringList();
+
+ QStringList dependents;
+ QString name;
+ QString version;
+
+ QMap<QString, LocalPackage> localPackages = d->m_localPackageHub->localPackages();
+ for (const KDUpdater::LocalPackage &localPackage : qAsConst(localPackages)) {
+ for (const QString &dependency : localPackage.dependencies) {
+ parseNameAndVersion(dependency, &name, &version);
+ if (componentMatches(component, name, version)) {
+ dependents.append(localPackage.name);
}
}
}
- return dependants;
+ return dependents;
}
/*!