diff options
author | Katja Marttila <katja.marttila@qt.io> | 2022-05-13 15:25:18 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2022-05-17 06:18:41 +0000 |
commit | c107d9ae122f83ae653badc04c37f9bfe099f45d (patch) | |
tree | 7d53f4ff387d900abda22f576fdef560d27f97de /src/libs/installer/packagemanagercore_p.cpp | |
parent | 21de5f081ab3b18625febcd8ac181f6a122c4c7f (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.cpp | 37 |
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); + } } } |