summaryrefslogtreecommitdiffstats
path: root/installerbuilder
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2011-08-26 11:28:02 +0200
committerKarsten Heimrich <karsten.heimrich@nokia.com>2011-09-06 17:09:20 +0200
commitae6b72a725af8d0d5398519b1ceb11ed65a9f765 (patch)
treeb6f81f6dbe18e62452a5d71ad5d98d99a6f264be /installerbuilder
parentf8ed29a45f64d4b2524d8ebfad1b2f2d1bfab8fa (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.cpp8
-rw-r--r--installerbuilder/libinstaller/packagemanagercore_p.cpp9
-rw-r--r--installerbuilder/libinstaller/packagemanagercore_p.h4
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;