summaryrefslogtreecommitdiffstats
path: root/installerbuilder
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-01-17 15:02:01 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2012-01-17 17:48:38 +0100
commit6d50d407c0047d75a7c746e1147a107ee3c75bad (patch)
tree795a8594ea6bbb81d6539a9580e703b9fbb6628c /installerbuilder
parent47bc2f470f6609666d31116c2774cd191091a0bc (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')
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp12
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.h4
-rw-r--r--installerbuilder/libinstaller/packagemanagercore_p.cpp2
-rw-r--r--installerbuilder/libinstaller/settings.cpp29
-rw-r--r--installerbuilder/libinstaller/settings.h1
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);