summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/metadatajob.cpp2
-rw-r--r--src/libs/installer/settings.cpp42
-rw-r--r--tests/auto/installer/metadatajob/data/repositoryActionRemove/Updates.xml2
-rw-r--r--tests/auto/installer/metadatajob/tst_metadatajob.cpp6
4 files changed, 38 insertions, 14 deletions
diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp
index 26fd2b2a5..d986db87d 100644
--- a/src/libs/installer/metadatajob.cpp
+++ b/src/libs/installer/metadatajob.cpp
@@ -260,7 +260,7 @@ void MetadataJob::doStart()
continue;
QString url;
- url = repo.url().toString() + updateFilePath;
+ url = repo.url().toString(QUrl::StripTrailingSlash) + updateFilePath;
if (!m_core->value(scUrlQueryString).isEmpty())
url += m_core->value(scUrlQueryString) + QLatin1Char('&');
// also append a random string to avoid proxy caches
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index e18f63689..d3c74c41d 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -761,28 +761,52 @@ static bool apply(const RepoHash &updates, QMultiHash<QUrl, Repository> *reposTo
QList<QPair<Repository, Repository> > values = updates.values(QLatin1String("replace"));
for (int a = 0; a < values.count(); ++a) {
const QPair<Repository, Repository> data = values.at(a);
- if (reposToUpdate->contains(data.first.url())) {
- update = true;
- reposToUpdate->remove(data.first.url());
- reposToUpdate->insert(data.second.url(), data.second);
+ auto it = reposToUpdate->begin();
+ while (it != reposToUpdate->end()) {
+ const QUrl &repoUrl = it.key();
+ if (repoUrl.matches(data.first.url(), QUrl::NormalizePathSegments)) {
+ update = true;
+ reposToUpdate->remove(data.first.url());
+ reposToUpdate->insert(data.second.url(), data.second);
+ break;
+ } else {
+ ++it;
+ }
}
}
values = updates.values(QLatin1String("remove"));
for (int a = 0; a < values.count(); ++a) {
const QPair<Repository, Repository> data = values.at(a);
- if (reposToUpdate->contains(data.first.url())) {
- update = true;
- reposToUpdate->remove(data.first.url());
+ auto it = reposToUpdate->begin();
+ while (it != reposToUpdate->end()) {
+ const QUrl &repoUrl = it.key();
+ if (repoUrl.matches(data.first.url(), QUrl::NormalizePathSegments)) {
+ it = reposToUpdate->erase(it);
+ update = true;
+ } else {
+ ++it;
+ }
}
}
values = updates.values(QLatin1String("add"));
for (int a = 0; a < values.count(); ++a) {
const QPair<Repository, Repository> data = values.at(a);
- if (!reposToUpdate->contains(data.first.url())) {
- update = true;
+ auto it = reposToUpdate->begin();
+ bool repositoryAlreadyAdded = false;
+ while (it != reposToUpdate->end()) {
+ const QUrl &repoUrl = it.key();
+ if (repoUrl.matches(data.first.url(), QUrl::NormalizePathSegments)) {
+ repositoryAlreadyAdded = true;
+ break;
+ } else {
+ ++it;
+ }
+ }
+ if (!repositoryAlreadyAdded) {
reposToUpdate->insert(data.first.url(), data.first);
+ update = true;
}
}
return update;
diff --git a/tests/auto/installer/metadatajob/data/repositoryActionRemove/Updates.xml b/tests/auto/installer/metadatajob/data/repositoryActionRemove/Updates.xml
index 5e612183a..5fd962056 100644
--- a/tests/auto/installer/metadatajob/data/repositoryActionRemove/Updates.xml
+++ b/tests/auto/installer/metadatajob/data/repositoryActionRemove/Updates.xml
@@ -2,7 +2,7 @@
<ApplicationName>{AnyApplication}</ApplicationName>
<ApplicationVersion>1.0.0</ApplicationVersion>
<RepositoryUpdate>
- <Repository action="http://code.qt.io/remove" url="../repository"/>
+ <Repository action="http://code.qt.io/remove" url="../repository" displayname="Example repository"/>
</RepositoryUpdate>
<PackageUpdate>
<Name>C</Name>
diff --git a/tests/auto/installer/metadatajob/tst_metadatajob.cpp b/tests/auto/installer/metadatajob/tst_metadatajob.cpp
index cb974e7ad..83b57bd8c 100644
--- a/tests/auto/installer/metadatajob/tst_metadatajob.cpp
+++ b/tests/auto/installer/metadatajob/tst_metadatajob.cpp
@@ -65,7 +65,7 @@ private slots:
PackageManagerCore core;
core.setInstaller();
QSet<Repository> repoList;
- Repository repo = Repository::fromUserInput(":///data/repositoryActionAdd");
+ Repository repo = Repository::fromUserInput(":///data/repositoryActionAdd/");
repoList.insert(repo);
core.settings().setDefaultRepositories(repoList);
MetadataJob metadata;
@@ -91,8 +91,8 @@ private slots:
MetadataJob metadata;
metadata.setPackageManagerCore(&core);
- QTest::ignoreMessage(QtDebugMsg, "Repository to remove: \"file::///data/repository\"");
- QTest::ignoreMessage(QtDebugMsg, "Repository to remove: \"file::///data/repository\"");
+ QTest::ignoreMessage(QtDebugMsg, "Repository to remove: \"Example repository\"");
+ QTest::ignoreMessage(QtDebugMsg, "Repository to remove: \"Example repository\"");
metadata.start();
metadata.waitForFinished();
QCOMPARE(metadata.metadata().count(), 1);