diff options
author | kh1 <karsten.heimrich@nokia.com> | 2012-01-17 15:02:01 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@nokia.com> | 2012-01-17 17:48:38 +0100 |
commit | 6d50d407c0047d75a7c746e1147a107ee3c75bad (patch) | |
tree | 795a8594ea6bbb81d6539a9580e703b9fbb6628c /installerbuilder | |
parent | 47bc2f470f6609666d31116c2774cd191091a0bc (diff) |
Update repositories after redirect.
Once we got the redirect we should update the repository stored in
the settings as well(this is independent of the repository type).
Change-Id: I513eff4b5d72e29e879dbf58f224f4262443520f
Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
Diffstat (limited to 'installerbuilder')
5 files changed, 46 insertions, 2 deletions
diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp index 184d26a15..ada5bcabe 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp @@ -58,6 +58,11 @@ QSet<Repository> GetRepositoriesMetaInfoJob::repositories() const return m_repositories; } +QHash<Repository, Repository> GetRepositoriesMetaInfoJob::redirects() const +{ + return m_redirects; +} + void GetRepositoriesMetaInfoJob::setRepositories(const QSet<Repository> &repos) { m_repositories = repos; @@ -153,10 +158,11 @@ void GetRepositoriesMetaInfoJob::fetchNextRepo() } m_job = new GetRepositoryMetaInfoJob(m_publicKey, this); - m_job->setSilentRetries(silentRetries()); - m_job->setRepository(m_tmpRepositories.takeLast()); connect(m_job, SIGNAL(finished(KDJob*)), this, SLOT(jobFinished(KDJob*))); connect(m_job, SIGNAL(infoMessage(KDJob*, QString)), this, SIGNAL(infoMessage(KDJob*, QString))); + + m_job->setSilentRetries(silentRetries()); + m_job->setRepository(m_currentRepository = m_tmpRepositories.takeLast()); m_job->start(); } @@ -187,6 +193,8 @@ void GetRepositoriesMetaInfoJob::jobFinished(KDJob *j) const QString &tmpdir = job->releaseTemporaryDirectory(); job->m_tempDirDeleter.passAndRelease(m_tempDirDeleter, tmpdir); m_repositoryByTemporaryDirectory.insert(tmpdir, job->repository()); + if (m_currentRepository != job->repository()) + m_redirects.insert(m_currentRepository, job->repository()); } QMetaObject::invokeMethod(this, "fetchNextRepo", Qt::QueuedConnection); } diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h index f9f93a0b1..3ef832fae 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h @@ -54,6 +54,7 @@ public: explicit GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent = 0); QSet<Repository> repositories() const; + QHash<Repository, Repository> redirects() const; void setRepositories(const QSet<Repository> &repositories); QStringList temporaryDirectories() const; @@ -86,6 +87,9 @@ private: bool m_haveIgnoredError; QString m_errorString; mutable TempDirDeleter m_tempDirDeleter; + + Repository m_currentRepository; + QHash<Repository, Repository> m_redirects; }; } // namespace QInstaller diff --git a/installerbuilder/libinstaller/packagemanagercore_p.cpp b/installerbuilder/libinstaller/packagemanagercore_p.cpp index f572703c5..3af6db817 100644 --- a/installerbuilder/libinstaller/packagemanagercore_p.cpp +++ b/installerbuilder/libinstaller/packagemanagercore_p.cpp @@ -2042,6 +2042,8 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories() } m_repoFetched = true; + m_settings.updateRepositories(m_repoMetaInfoJob->redirects()); + return m_repoFetched; } diff --git a/installerbuilder/libinstaller/settings.cpp b/installerbuilder/libinstaller/settings.cpp index cdda2a2ec..aaa175ae9 100644 --- a/installerbuilder/libinstaller/settings.cpp +++ b/installerbuilder/libinstaller/settings.cpp @@ -163,6 +163,25 @@ public: return path; return m_data.value(scPrefix).toString() + QLatin1String("/") + path; } + + void updateRepositories(const QHash<Repository, Repository> &updates, const QString &repoType) + { + bool update = false; + QSet<Repository> repositories = variantListToSet<Repository>(m_data.values(repoType)); + foreach (const Repository &repo, updates.keys()) { + if (repositories.contains(repo)) { + update = true; + repositories.remove(repo); + repositories.insert(updates.value(repo)); + } + } + + if (update) { + m_data.remove(repoType); + foreach (const Repository &repository, repositories) + m_data.insertMulti(repoType, QVariant().fromValue(repository)); + } + } }; @@ -390,6 +409,16 @@ QSet<Repository> Settings::repositories() const + d->m_data.values(scUserRepositories) + d->m_data.values(scTmpRepositories)); } +void Settings::updateRepositories(const QHash<Repository, Repository> &updates) +{ + if (updates.isEmpty()) + return; + + d->updateRepositories(updates, scRepositories); + d->updateRepositories(updates, scTmpRepositories); + d->updateRepositories(updates, scUserRepositories); +} + QSet<Repository> Settings::defaultRepositories() const { return variantListToSet<Repository>(d->m_data.values(scRepositories)); diff --git a/installerbuilder/libinstaller/settings.h b/installerbuilder/libinstaller/settings.h index aa3123d8f..15469fadb 100644 --- a/installerbuilder/libinstaller/settings.h +++ b/installerbuilder/libinstaller/settings.h @@ -89,6 +89,7 @@ public: bool hasReplacementRepos() const; QSet<Repository> repositories() const; + void updateRepositories(const QHash<Repository, Repository> &updates); QSet<Repository> defaultRepositories() const; void setDefaultRepositories(const QSet<Repository> &repositories); |