diff options
author | kh1 <karsten.heimrich@nokia.com> | 2011-08-26 11:28:02 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@nokia.com> | 2011-09-06 17:09:20 +0200 |
commit | ae6b72a725af8d0d5398519b1ceb11ed65a9f765 (patch) | |
tree | b6f81f6dbe18e62452a5d71ad5d98d99a6f264be /installerbuilder | |
parent | f8ed29a45f64d4b2524d8ebfad1b2f2d1bfab8fa (diff) |
Make sure we can use possible to replace installed components.
Means, once we notice that a component replaces a other,
we will remove it from the passed components list and
keep it inside the replacement hash. This needs to be
taken into account when we resolve component dependencies,
as a possible update might be a replacement, but not
scheduled for install while an other update to install
can have a dependency of the component to replace.
Change-Id: I00c0ad025f6a3640cfecfb8e3a1f36c6ec8cd6d8
Reviewed-on: http://codereview.qt.nokia.com/4250
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
Reviewed-by: Niels Weber <niels.2.weber@nokia.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@nokia.com>
Diffstat (limited to 'installerbuilder')
-rw-r--r-- | installerbuilder/libinstaller/packagemanagercore.cpp | 8 | ||||
-rw-r--r-- | installerbuilder/libinstaller/packagemanagercore_p.cpp | 9 | ||||
-rw-r--r-- | installerbuilder/libinstaller/packagemanagercore_p.h | 4 |
3 files changed, 17 insertions, 4 deletions
diff --git a/installerbuilder/libinstaller/packagemanagercore.cpp b/installerbuilder/libinstaller/packagemanagercore.cpp index 5a18ab4af..c6b80f4da 100644 --- a/installerbuilder/libinstaller/packagemanagercore.cpp +++ b/installerbuilder/libinstaller/packagemanagercore.cpp @@ -842,12 +842,12 @@ void PackageManagerCore::appendUpdaterComponent(Component *component) QList<Component*> PackageManagerCore::availableComponents() const { if (isUpdater()) - return d->m_updaterComponents + d->m_updaterComponentsDeps; + return d->m_updaterComponents + d->m_updaterComponentsDeps + d->m_updaterDependencyReplacements; QList<Component*> result = d->m_rootComponents; foreach (QInstaller::Component *component, d->m_rootComponents) result += component->childComponents(true, AllMode); - return result; + return result + d->m_rootDependencyReplacements; } /*! @@ -1510,8 +1510,8 @@ void PackageManagerCore::storeReplacedComponents(QHash<QString, Component*> &com component = new Component(this); component->setValue(scName, componentName); } else { - // TODO: at the moment updates could not resolve replaced dependency, maybe we need this in the future - //component->loadComponentScript(); + component->loadComponentScript(); + d->replacementDependencyComponents(data.runMode).append(component); } if (component) d->componentsToReplace(data.runMode).insert(componentName, qMakePair(it.key(), component)); diff --git a/installerbuilder/libinstaller/packagemanagercore_p.cpp b/installerbuilder/libinstaller/packagemanagercore_p.cpp index bdef39825..54a46c7d0 100644 --- a/installerbuilder/libinstaller/packagemanagercore_p.cpp +++ b/installerbuilder/libinstaller/packagemanagercore_p.cpp @@ -270,6 +270,8 @@ void PackageManagerCorePrivate::clearAllComponentLists() qDeleteAll(m_rootComponents); m_rootComponents.clear(); + m_rootDependencyReplacements.clear(); + const QList<QPair<Component*, Component*> > list = m_componentsToReplaceAllMode.values(); for (int i = 0; i < list.count(); ++i) delete list.at(i).second; @@ -285,6 +287,8 @@ void PackageManagerCorePrivate::clearUpdaterComponentLists() qDeleteAll(m_updaterComponentsDeps); m_updaterComponentsDeps.clear(); + m_updaterDependencyReplacements.clear(); + const QList<QPair<Component*, Component*> > list = m_componentsToReplaceUpdaterMode.values(); for (int i = 0; i < list.count(); ++i) delete list.at(i).second; @@ -292,6 +296,11 @@ void PackageManagerCorePrivate::clearUpdaterComponentLists() m_componentsToInstallCalculated = false; } +QList<Component*> &PackageManagerCorePrivate::replacementDependencyComponents(RunMode mode) +{ + return mode == AllMode ? m_rootDependencyReplacements : m_updaterDependencyReplacements; +} + QHash<QString, QPair<Component*, Component*> > &PackageManagerCorePrivate::componentsToReplace(RunMode mode) { return mode == AllMode ? m_componentsToReplaceAllMode : m_componentsToReplaceUpdaterMode; diff --git a/installerbuilder/libinstaller/packagemanagercore_p.h b/installerbuilder/libinstaller/packagemanagercore_p.h index 358b7c7af..474560f26 100644 --- a/installerbuilder/libinstaller/packagemanagercore_p.h +++ b/installerbuilder/libinstaller/packagemanagercore_p.h @@ -101,6 +101,7 @@ public: void clearAllComponentLists(); void clearUpdaterComponentLists(); + QList<Component*> &replacementDependencyComponents(RunMode mode); QHash<QString, QPair<Component*, Component*> > &componentsToReplace(RunMode mode); void clearComponentsToInstall(); @@ -175,8 +176,11 @@ public: QString m_installerBaseBinaryUnreplaced; QList<Component*> m_rootComponents; + QList<Component*> m_rootDependencyReplacements; + QList<Component*> m_updaterComponents; QList<Component*> m_updaterComponentsDeps; + QList<Component*> m_updaterDependencyReplacements; OperationList m_ownedOperations; OperationList m_performedOperationsOld; |