From b06f5b541748afc30bff787858702ed575662382 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Tue, 23 Mar 2021 12:31:31 +0200 Subject: Offline-generator: Fix duplicate package entries in internal Updates.xml In a somewhat rare case, it is possible that a same package exist in multiple repositories. The latest available package from remotes is used - however if we select that package for inclusion and also implicitly get some other package from the another repository it exists in with an older version (autodependency, etc.), that repository is then also used to parse package information, and we store a duplicate entry of the package to the Updates.xml to-be-written to the offline installer binary. Fix by appending only the package with the latest version to the PackageInfoVector object used to temporarily hold the package information. Task-number: QTIFW-2190 Change-Id: Icdb3dc979153dfada37fdb0aabb3c718bc8aedff Reviewed-by: Qt CI Bot Reviewed-by: Katja Marttila --- src/libs/ifwtools/repositorygen.cpp | 29 +++++- tests/auto/tools/repotest/settings.qrc | 24 +++++ .../repository_1/A/2.0.0content.7z | Bin 0 -> 32 bytes .../repository_1/A/2.0.0content.7z.sha1 | 1 + .../repository_1/A/2.0.0meta.7z | Bin 0 -> 209 bytes .../repository_1/B/1.0.0content.7z | Bin 0 -> 32 bytes .../repository_1/B/1.0.0content.7z.sha1 | 1 + .../repository_1/B/1.0.0meta.7z | Bin 0 -> 106 bytes .../test_package_versions/repository_1/Updates.xml | 28 ++++++ .../repository_2/A/1.0.0content.7z | Bin 0 -> 32 bytes .../repository_2/A/1.0.0content.7z.sha1 | 1 + .../repository_2/A/1.0.0meta.7z | Bin 0 -> 221 bytes .../repository_2/B/1.0.0content.7z | Bin 0 -> 32 bytes .../repository_2/B/1.0.0content.7z.sha1 | 1 + .../repository_2/B/1.0.0meta.7z | Bin 0 -> 106 bytes .../test_package_versions/repository_2/Updates.xml | 28 ++++++ .../repository_3/A/1.0.0content.7z | Bin 0 -> 32 bytes .../repository_3/A/1.0.0content.7z.sha1 | 1 + .../repository_3/A/1.0.0meta.7z | Bin 0 -> 221 bytes .../repository_3/B/3.0.0content.7z | Bin 0 -> 32 bytes .../repository_3/B/3.0.0content.7z.sha1 | 1 + .../repository_3/B/3.0.0meta.7z | Bin 0 -> 106 bytes .../test_package_versions/repository_3/Updates.xml | 28 ++++++ tests/auto/tools/repotest/tst_repotest.cpp | 98 ++++++++++++++------- 24 files changed, 206 insertions(+), 35 deletions(-) create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z create mode 100644 tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml diff --git a/src/libs/ifwtools/repositorygen.cpp b/src/libs/ifwtools/repositorygen.cpp index 863b5655b..d8339b063 100644 --- a/src/libs/ifwtools/repositorygen.cpp +++ b/src/libs/ifwtools/repositorygen.cpp @@ -672,8 +672,33 @@ PackageInfoVector QInstallerTools::createListOfRepositoryPackages(const QStringL el.save(metaStream, 0); } info.metaNode = metaString; - dict.push_back(info); - qDebug() << "- it provides the package" << info.name << " - " << info.version; + + bool pushToDict = true; + bool replacement = false; + // Check whether this package already exists in vector: + for (int i = 0; i < dict.size(); ++i) { + const QInstallerTools::PackageInfo oldInfo = dict.at(i); + if (oldInfo.name != info.name) + continue; + + if (KDUpdater::compareVersion(info.version, oldInfo.version) > 0) { + // A package with newer version, it will replace the existing one. + dict.remove(i); + replacement = true; + } else { + // A package with older or same version, do not add it again. + pushToDict = false; + } + break; + } + + if (pushToDict) { + replacement ? qDebug() << "- it provides a new version of the package" << info.name << " - " << info.version << "- replaced" + : qDebug() << "- it provides the package" << info.name << " - " << info.version; + dict.push_back(info); + } else { + qDebug() << "- it provides an old version of the package" << info.name << " - " << info.version << "- ignored"; + } } } } diff --git a/tests/auto/tools/repotest/settings.qrc b/tests/auto/tools/repotest/settings.qrc index e731af222..a0b5743fe 100644 --- a/tests/auto/tools/repotest/settings.qrc +++ b/tests/auto/tools/repotest/settings.qrc @@ -31,5 +31,29 @@ repository_unite/C/1.0.0content.7z.sha1 repository_unite/2020-11-10-0931_meta.7z repository_unite/Updates.xml + + test_package_versions/repository_1/A/2.0.0content.7z + test_package_versions/repository_1/A/2.0.0content.7z.sha1 + test_package_versions/repository_1/A/2.0.0meta.7z + test_package_versions/repository_1/B/1.0.0content.7z + test_package_versions/repository_1/B/1.0.0content.7z.sha1 + test_package_versions/repository_1/B/1.0.0meta.7z + test_package_versions/repository_1/Updates.xml + + test_package_versions/repository_2/A/1.0.0content.7z + test_package_versions/repository_2/A/1.0.0content.7z.sha1 + test_package_versions/repository_2/A/1.0.0meta.7z + test_package_versions/repository_2/B/1.0.0content.7z + test_package_versions/repository_2/B/1.0.0content.7z.sha1 + test_package_versions/repository_2/B/1.0.0meta.7z + test_package_versions/repository_2/Updates.xml + + test_package_versions/repository_3/A/1.0.0content.7z + test_package_versions/repository_3/A/1.0.0content.7z.sha1 + test_package_versions/repository_3/A/1.0.0meta.7z + test_package_versions/repository_3/B/3.0.0content.7z + test_package_versions/repository_3/B/3.0.0content.7z.sha1 + test_package_versions/repository_3/B/3.0.0meta.7z + test_package_versions/repository_3/Updates.xml diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z new file mode 100644 index 000000000..af0863696 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z new file mode 100644 index 000000000..e5be1148e Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml new file mode 100644 index 000000000..dfae8c8bd --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml @@ -0,0 +1,28 @@ + + {AnyApplication} + 1.0.0 + true + + A + A + Example component A + 2.0.0 + 2020-01-01 + true + + + content.7z + da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a + + + B + B + Example component B + 1.0.0 + 2020-01-01 + true + + content.7z + d88b373458b4bbec38132692061bf1e7aa68e7f7 + + diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z new file mode 100644 index 000000000..c4da482bf Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z new file mode 100644 index 000000000..e5be1148e Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml new file mode 100644 index 000000000..ac12fba4b --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml @@ -0,0 +1,28 @@ + + {AnyApplication} + 1.0.0 + true + + A + A + Example component A + 1.0.0 + 2020-01-01 + true + + + content.7z + da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a + + + B + B + Example component B + 1.0.0 + 2020-01-01 + true + + content.7z + d88b373458b4bbec38132692061bf1e7aa68e7f7 + + diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z new file mode 100644 index 000000000..3706e8dd8 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z new file mode 100644 index 000000000..46e2c9124 Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f \ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z new file mode 100644 index 000000000..e5be1148e Binary files /dev/null and b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z differ diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml new file mode 100644 index 000000000..40d86538c --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml @@ -0,0 +1,28 @@ + + {AnyApplication} + 1.0.0 + true + + A + A + Example component A + 1.0.0 + 2020-01-01 + true + + + content.7z + da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a + + + B + B + Example component B + 3.0.0 + 2020-01-01 + true + + content.7z + d88b373458b4bbec38132692061bf1e7aa68e7f7 + + diff --git a/tests/auto/tools/repotest/tst_repotest.cpp b/tests/auto/tools/repotest/tst_repotest.cpp index c467d21d2..02594f400 100644 --- a/tests/auto/tools/repotest/tst_repotest.cpp +++ b/tests/auto/tools/repotest/tst_repotest.cpp @@ -80,10 +80,10 @@ private: m_repoInfo.packages << ":///packages_update"; } - void initRepoUpdateFromRepository(const QString &repository) + void initRepoUpdateFromRepositories(const QStringList &repositories) { clearData(); - m_repoInfo.repositoryPackages << repository; + m_repoInfo.repositoryPackages << repositories; } void verifyUniteMetadata(const QString &scriptVersion) @@ -116,7 +116,7 @@ private: "MetadataName"); } - void verifyComponentRepository(const QString &componentAVersion, bool hasComponentMeta) + void verifyComponentRepository(const QString &componentAVersion, const QString &componentBVersion, bool hasComponentMeta) { const QString content = "%1content.7z"; const QString contentSha1 = "%1content.7z.sha1"; @@ -124,10 +124,10 @@ private: QStringList componentA; QStringList componentB; componentA << qPrintable(content.arg(componentAVersion)) << qPrintable(contentSha1.arg(componentAVersion)); - componentB << "1.0.0content.7z" << "1.0.0content.7z.sha1"; + componentB << qPrintable(content.arg(componentBVersion)) << qPrintable(contentSha1.arg(componentBVersion)); if (hasComponentMeta) { componentA << qPrintable(meta.arg(componentAVersion)); - componentB << "1.0.0meta.7z"; + componentB << qPrintable(meta.arg(componentBVersion)); } VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/A", componentA); VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/B", componentB); @@ -169,14 +169,14 @@ private: } } - void ignoreMessageForCollectingRepository(const QString &repository) + void ignoreMessageForCollectingRepository(const QStringList &repositories) { const QString message = "Process repository \"%2\""; QTest::ignoreMessage(QtDebugMsg, "Collecting information about available repository packages..."); - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(repository))); + for (auto &repo : repositories) + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(repo))); QTest::ignoreMessage(QtDebugMsg, "Collecting information about available packages..."); QTest::ignoreMessage(QtDebugMsg, "No available packages found at the specified location."); - QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); } void ignoreMessagesForCopyMetadata(const QString &component, bool hasMeta, bool update) @@ -296,7 +296,7 @@ private slots: ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -306,7 +306,7 @@ private slots: ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyUniteMetadata("1.0.0"); } @@ -315,7 +315,7 @@ private slots: ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); verifyUniteMetadata("1.0.0"); } @@ -324,7 +324,7 @@ private slots: ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); generateRepo(true, false, false, QStringList () << "A"); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); verifyComponentShaUpdate(1); } @@ -334,7 +334,7 @@ private slots: ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); generateRepo(true, false, false, QStringList () << "A" << "B"); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); verifyComponentShaUpdate(2); } @@ -344,7 +344,7 @@ private slots: // Create 'base' repository which will be updated ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); // Update the 'base' repository initRepoUpdate(); @@ -355,7 +355,7 @@ private slots: const QString &message = "Update component \"A\" in \"%1\" ."; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); generateRepo(true, false, true); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -363,12 +363,12 @@ private slots: { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0",true); + verifyComponentRepository("1.0.0", "1.0.0", true); initRepoUpdate(); ignoreMessagesForUpdateComponents(); generateRepo(true, false, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -377,13 +377,13 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); initRepoUpdate(); ignoreMessagesForUpdateComponents(); ignoreMessagesForUniteMeta(true); generateRepo(true, true, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyUniteMetadata("2.0.0"); } @@ -391,7 +391,7 @@ private slots: { ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); initRepoUpdate(); ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); @@ -400,7 +400,7 @@ private slots: ignoreMessagesForCopyMetadata("B", false, true); ignoreMessagesForUniteMeta(true); generateRepo(false, true, false); - verifyComponentRepository("2.0.0", false); + verifyComponentRepository("2.0.0", "1.0.0", false); verifyUniteMetadata("2.0.0"); } @@ -408,17 +408,47 @@ private slots: { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepository(":///repository_component"); - ignoreMessageForCollectingRepository("repository_component"); + initRepoUpdateFromRepositories(QStringList() << ":///repository_component"); + ignoreMessageForCollectingRepository(QStringList() << "repository_component"); + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"B\" - \"1.0.0\""); ignoreMessagesForCopyRepository("B", "1.0.0", "repository_component"); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_component"); ignoreMessagesForComponentSha(QStringList() << "A" << "B", true); generateRepo(true, false, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); + verifyComponentMetaUpdatesXml(); + } + + void testUpdateComponentsFromMultipleRepositories() + { + ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); + generateRepo(true, false, false); + verifyComponentRepository("1.0.0", "1.0.0", true); + + initRepoUpdateFromRepositories(QStringList() << ":///test_package_versions/repository_1" + << ":///test_package_versions/repository_2" << ":///test_package_versions/repository_3"); + + ignoreMessageForCollectingRepository(QStringList() + << "repository_1" << "repository_2" << "repository_3"); + + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"B\" - \"1.0.0\""); + + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"A\" - \"1.0.0\" - ignored"); + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"B\" - \"1.0.0\" - ignored"); + + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"A\" - \"1.0.0\" - ignored"); + QTest::ignoreMessage(QtDebugMsg, "- it provides a new version of the package \"B\" - \"3.0.0\" - replaced"); + + ignoreMessagesForCopyRepository("B", "3.0.0", "test_package_versions/repository_3"); + ignoreMessagesForCopyRepository("A", "2.0.0", "test_package_versions/repository_1"); + ignoreMessagesForComponentSha(QStringList() << "A" << "B", true); + generateRepo(true, false, false); + verifyComponentRepository("2.0.0", "3.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -427,10 +457,11 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepository(":///repository_componentAndUnite"); - ignoreMessageForCollectingRepository("repository_componentAndUnite"); + initRepoUpdateFromRepositories(QStringList() << ":///repository_componentAndUnite"); + ignoreMessageForCollectingRepository(QStringList() << "repository_componentAndUnite"); + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"C\" - \"1.0.0\""); ignoreMessageForUpdateComponent(); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_componentAndUnite"); @@ -439,7 +470,7 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "C", true); generateRepo(true, true, true); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/C", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1" << "1.0.0meta.7z"); verifyUniteMetadata("2.0.0"); } @@ -448,10 +479,11 @@ private slots: { ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); - initRepoUpdateFromRepository(":///repository_unite"); - ignoreMessageForCollectingRepository("repository_unite"); + initRepoUpdateFromRepositories(QStringList() << ":///repository_unite"); + ignoreMessageForCollectingRepository(QStringList() << "repository_unite"); + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"C\" - \"1.0.0\""); ignoreMessageForUpdateComponent(); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_unite"); @@ -459,7 +491,7 @@ private slots: ignoreMessagesForUniteMeta(true); generateRepo(false, true, true); - verifyComponentRepository("2.0.0", false); + verifyComponentRepository("2.0.0", "1.0.0", false); VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/C", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); verifyUniteMetadata("2.0.0"); } -- cgit v1.2.3