summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.cpp
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2022-05-13 15:25:18 +0300
committerKatja Marttila <katja.marttila@qt.io>2022-05-17 06:18:41 +0000
commitc107d9ae122f83ae653badc04c37f9bfe099f45d (patch)
tree7d53f4ff387d900abda22f576fdef560d27f97de /src/libs/installer/packagemanagercore_p.cpp
parent21de5f081ab3b18625febcd8ac181f6a122c4c7f (diff)
Fix calculating autodependencies for install/uninstall
Autodependencies can be added also from script. The uninstaller and installer calculators ignored the values set from script depending on at what state of the script run the autodependencies were added. Fixed so that at any point the autodependencies are added from script, the installer and uninstaller calculators has correct values. Change-Id: If993bcce72f889b51e4b981473540c4e1ccd6067 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index e279a8027..92e30c28c 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -405,7 +405,6 @@ bool PackageManagerCorePrivate::buildComponentTree(QHash<QString, Component*> &c
foreach (QInstaller::Component *component, components) {
if (loadScript)
component->loadComponentScript();
- createDependencyHashes(component);
}
// now we can preselect components in the tree
foreach (QInstaller::Component *component, components) {
@@ -3155,20 +3154,38 @@ void PackageManagerCorePrivate::commitPendingUnstableComponents()
m_pendingUnstableComponents.clear();
}
-void PackageManagerCorePrivate::createDependencyHashes(const Component* component)
+void PackageManagerCorePrivate::createAutoDependencyHash(const QString &component, const QString &oldDependencies, const QString &newDependencies)
{
- for (const QString &autodepend : component->autoDependencies()) {
+ // User might have changed autodependencies with setValue. Remove the old values.
+ const QStringList oldDependencyList = oldDependencies.split(QInstaller::commaRegExp(), Qt::SkipEmptyParts);
+ for (const QString &removedDependency : oldDependencyList) {
+ QStringList value = m_autoDependencyComponentHash.value(removedDependency);
+ value.removeAll(component);
+ if (value.isEmpty())
+ m_autoDependencyComponentHash.remove(removedDependency);
+ else
+ m_autoDependencyComponentHash.insert(removedDependency, value);
+ }
+
+ const QStringList newDependencyList = newDependencies.split(QInstaller::commaRegExp(), Qt::SkipEmptyParts);
+ for (const QString &autodepend : newDependencyList) {
QStringList value = m_autoDependencyComponentHash.value(autodepend);
- if (!value.contains(component->name()))
- value.append(component->name());
- m_autoDependencyComponentHash.insert(autodepend, value);
+ if (!value.contains(component)) {
+ value.append(component);
+ m_autoDependencyComponentHash.insert(autodepend, value);
+ }
}
+}
- for (const QString &depend : component->localDependencies()) {
+void PackageManagerCorePrivate::createLocalDependencyHash(const QString &component, const QString &dependencies)
+{
+ const QStringList localDependencies = dependencies.split(QInstaller::commaRegExp(), Qt::SkipEmptyParts);
+ for (const QString &depend : localDependencies) {
QStringList value = m_localDependencyComponentHash.value(depend);
- if (!value.contains(component->name()))
- value.append(component->name());
- m_localDependencyComponentHash.insert(depend, value);
+ if (!value.contains(component)) {
+ value.append(component);
+ m_localDependencyComponentHash.insert(depend, value);
+ }
}
}