diff options
11 files changed, 91 insertions, 8 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 129c35d46..d9a35bcb1 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1931,7 +1931,7 @@ bool PackageManagerCorePrivate::runPackageUpdater() // There is a replacement, but the replacement is not scheduled for update, keep it as well. if (m_componentsToReplaceUpdaterMode.contains(name) - && !m_componentsToReplaceUpdaterMode.value(name).first->updateRequested()) { + && !m_installerCalculator->orderedComponentsToInstall().contains(m_componentsToReplaceUpdaterMode.value(name).first)) { nonRevertedOperations.append(operation); continue; } @@ -3088,12 +3088,10 @@ void PackageManagerCorePrivate::calculateUninstallComponents() foreach (Component* component, m_core->components(PackageManagerCore::ComponentType::Replacements)) { // Uninstall the component if replacement is selected for install or update QPair<Component*, Component*> comp = componentsToReplace().value(component->name()); - if (comp.first) { - if (comp.first->isSelectedForInstallation() || comp.first->updateRequested()) { - uninstallerCalculator()->insertUninstallReason(component, - UninstallerCalculator::Replaced, comp.first->name()); - selectedComponentsToUninstall.append(comp.second); - } + if (comp.first && m_installerCalculator->orderedComponentsToInstall().contains(comp.first)) { + uninstallerCalculator()->insertUninstallReason(component, + UninstallerCalculator::Replaced, comp.first->name()); + selectedComponentsToUninstall.append(comp.second); } } foreach (Component *component, m_core->components(PackageManagerCore::ComponentType::AllNoReplacements)) { diff --git a/src/libs/installer/uninstallercalculator.cpp b/src/libs/installer/uninstallercalculator.cpp index 4c07d81e3..2f029630f 100644 --- a/src/libs/installer/uninstallercalculator.cpp +++ b/src/libs/installer/uninstallercalculator.cpp @@ -69,7 +69,8 @@ void UninstallerCalculator::appendComponentToUninstall(Component *component) Component *depComponent = m_core->componentByName(dependencyComponent); if (!depComponent) continue; - if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent)) { + if (depComponent->isInstalled() && !m_componentsToUninstall.contains(depComponent) + && !m_core->orderedComponentsToInstall().contains(depComponent)) { appendComponentToUninstall(depComponent); insertUninstallReason(depComponent, UninstallerCalculator::Dependent, component->name()); } diff --git a/tests/auto/installer/commandlineupdate/data/installPackagesRepository/Updates.xml b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/Updates.xml index 9e01f1800..de6e66525 100644 --- a/tests/auto/installer/commandlineupdate/data/installPackagesRepository/Updates.xml +++ b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/Updates.xml @@ -160,4 +160,20 @@ <ForcedUpdate>true</ForcedUpdate> <DownloadableArchives>content.7z</DownloadableArchives> </PackageUpdate> + <PackageUpdate> + <Name>qt.tools.qtcreator</Name> + <DisplayName>Component qtcreator. Depends on virtual component</DisplayName> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <Dependencies>qt.tools.qtcreator.enterprise.plugins</Dependencies> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> + <PackageUpdate> + <Name>qt.tools.qtcreator.enterprise.plugins</Name> + <DisplayName>enterprise plugin component</DisplayName> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <DownloadableArchives>content.7z</DownloadableArchives> + <Virtual>true</Virtual> + </PackageUpdate> </Updates> diff --git a/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator.enterprise.plugins/1.0.0content.7z b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator.enterprise.plugins/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..5c7c4f37d --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator.enterprise.plugins/1.0.0content.7z diff --git a/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator/1.0.0content.7z b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..e5e4178a4 --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/installPackagesRepository/qt.tools.qtcreator/1.0.0content.7z diff --git a/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/Updates.xml b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/Updates.xml new file mode 100644 index 000000000..f55998c48 --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/Updates.xml @@ -0,0 +1,32 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>false</Checksum> + <PackageUpdate> + <Name>qt.tools.qtcreator</Name> + <DisplayName>Component qtcreator. Dependency removed</DisplayName> + <Version>2.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> + <PackageUpdate> + <Name>qt.tools.qtcreator_gui</Name> + <DisplayName>Component K. Autodepends on componentJ</DisplayName> + <Description>Component K. Autodepends on componentJ</Description> + <Version>2.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <AutoDependOn>qt.tools.qtcreator</AutoDependOn> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> + <PackageUpdate> + <Name>qt.tools.qtcreator_gui.enterprise.plugins</Name> + <DisplayName>enterprise plugins, replaces another component</DisplayName> + <Version>2.0.0</Version> + <ReleaseDate>2018-03-14</ReleaseDate> + <Virtual>true</Virtual> + <Replaces>qt.tools.qtcreator.enterprise.plugins</Replaces> + <AutoDependOn>qt.tools.qtcreator</AutoDependOn> + <UpdateFile UncompressedSize="99" OS="Any" CompressedSize="305"/> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator/2.0.0content.7z b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..f2b69fc13 --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator/2.0.0content.7z diff --git a/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui.enterprise.plugins/2.0.0content.7z b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui.enterprise.plugins/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..03d191cb5 --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui.enterprise.plugins/2.0.0content.7z diff --git a/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui/2.0.0content.7z b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..515c3a5cf --- /dev/null +++ b/tests/auto/installer/commandlineupdate/data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui/2.0.0content.7z diff --git a/tests/auto/installer/commandlineupdate/settings.qrc b/tests/auto/installer/commandlineupdate/settings.qrc index d398abe30..c8f328d6b 100644 --- a/tests/auto/installer/commandlineupdate/settings.qrc +++ b/tests/auto/installer/commandlineupdate/settings.qrc @@ -17,6 +17,8 @@ <file>data/installPackagesRepository/componentF.subcomponent1.subsubcomponent2/1.0.0content.7z</file> <file>data/installPackagesRepository/componentF.subcomponent2.subsubcomponent1/1.0.0content.7z</file> <file>data/installPackagesRepository/componentF.subcomponent2.subsubcomponent2/1.0.0content.7z</file> + <file>data/installPackagesRepository/qt.tools.qtcreator/1.0.0content.7z</file> + <file>data/installPackagesRepository/qt.tools.qtcreator.enterprise.plugins/1.0.0content.7z</file> <file>data/installPackagesRepositoryUpdate/Updates.xml</file> <file>data/installPackagesRepositoryUpdate/componentA/1.0.0content.7z</file> <file>data/installPackagesRepositoryUpdate/componentB/2.0.0content.7z</file> @@ -52,5 +54,9 @@ <file>data/repositoryWithDependencyToEssential/Updates.xml</file> <file>data/repositoryWithDependencyToEssential/componentAutoDependOnA/1.0content.7z</file> <file>data/repositoryWithDependencyToEssential/componentA/3.0.0content.7z</file> + <file>data/repositoryUpdateWithReplacements/Updates.xml</file> + <file>data/repositoryUpdateWithReplacements/qt.tools.qtcreator/2.0.0content.7z</file> + <file>data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui/2.0.0content.7z</file> + <file>data/repositoryUpdateWithReplacements/qt.tools.qtcreator_gui.enterprise.plugins/2.0.0content.7z</file> </qresource> </RCC> diff --git a/tests/auto/installer/commandlineupdate/tst_commandlineupdate.cpp b/tests/auto/installer/commandlineupdate/tst_commandlineupdate.cpp index ef3163980..0faeecf74 100644 --- a/tests/auto/installer/commandlineupdate/tst_commandlineupdate.cpp +++ b/tests/auto/installer/commandlineupdate/tst_commandlineupdate.cpp @@ -318,6 +318,36 @@ private slots: << "installcontentD_update.txt" << "installcontentB_update.txt" << "installcontentE.txt" << "installcontentG.txt") << deletedComponentResources; + + /*********** Update packages with replacements **********/ + componentResources.clear(); + componentResources.append(ComponentResource("qt.tools.qtcreator", "1.0.0content.txt")); + componentResources.append(ComponentResource("qt.tools.qtcreator.enterprise.plugins", "1.0.0content.txt")); + componentResources.append(ComponentResource("componentE", "1.0.0content.txt")); + + componentResourcesAfterUpdate.clear(); + componentResourcesAfterUpdate.append(ComponentResource("qt.tools.qtcreator", "2.0.0content.txt")); + componentResourcesAfterUpdate.append(ComponentResource("qt.tools.qtcreator_gui", "2.0.0content.txt")); + componentResourcesAfterUpdate.append(ComponentResource("qt.tools.qtcreator_gui.enterprise.plugins", "2.0.0content.txt")); + componentResourcesAfterUpdate.append(ComponentResource("componentE", "1.0.0content.txt")); + + deletedComponentResources.clear(); + deletedComponentResources.append(ComponentResource("qt.tools.qtcreator.enterprise.plugins", "1.0.0content.txt")); + + QTest::newRow("Update packages with replacements") + << ":///data/installPackagesRepository" + << (QStringList()<< "qt.tools.qtcreator") + << PackageManagerCore::Success + << componentResources + << (QStringList() << "components.xml" << "installcontentA.txt" << "installcontentE.txt" << "installcontentG.txt" + << "installcontent.txt" << "qtcreator.txt" << "plugins.txt") + << ":///data/repositoryUpdateWithReplacements" + << (QStringList() << "qt.tools.qtcreator") + << PackageManagerCore::Success + << componentResourcesAfterUpdate + << (QStringList() << "components.xml" << "installcontentA.txt" << "installcontentE.txt" << "installcontentG.txt" + << "installcontent.txt" << "gui.txt" << "qtcreator2.txt" << "gui_plugins.txt") + << deletedComponentResources; } void testUpdate() |