summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-01-23 16:14:34 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2012-01-23 16:19:07 +0100
commitcc793a71634288014d5ada65e83380bcd6f1b529 (patch)
tree2785fd11c07afc3a2e6084a51782a3b7ab5eb1f7
parent2df217fc1738b5d0c01c1fdd7ee07df57717ca2a (diff)
Fix I247cca06386eee0f1af084ac4c15a813e38c3f02.
We need to update the repositories during fetch and restart afterwards. Thought we can't add them always, as otherwise we would restart again and again without fetching the actual meta data. Fully untested. Change-Id: I4420bfed56e060c67ce12cb684d422bcd0904bf3 Reviewed-by: Alexander Lenhardt <alexander.lenhardt@nokia.com>
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp58
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.h19
-rw-r--r--installerbuilder/libinstaller/getrepositorymetainfojob.cpp35
-rw-r--r--installerbuilder/libinstaller/getrepositorymetainfojob.h9
-rw-r--r--installerbuilder/libinstaller/packagemanagercore_p.cpp14
5 files changed, 52 insertions, 83 deletions
diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp
index c5df1d993..2a6b230c8 100644
--- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp
+++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp
@@ -33,6 +33,7 @@
#include "getrepositoriesmetainfojob.h"
#include "getrepositorymetainfojob.h"
+#include "packagemanagercore_p.h"
#include "qinstallerglobal.h"
#include <QtCore/QDebug>
@@ -43,35 +44,16 @@ using namespace QInstaller;
// -- GetRepositoriesMetaInfoJob
-GetRepositoriesMetaInfoJob::GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent)
- : KDJob(parent),
- m_publicKey(publicKey),
+GetRepositoriesMetaInfoJob::GetRepositoriesMetaInfoJob(PackageManagerCorePrivate *corePrivate)
+ : KDJob(corePrivate),
m_canceled(false),
m_silentRetries(3),
- m_haveIgnoredError(false)
+ m_haveIgnoredError(false),
+ m_corePrivate(corePrivate)
{
setCapabilities(Cancelable);
}
-QSet<Repository> GetRepositoriesMetaInfoJob::repositories() const
-{
- return m_repositories;
-}
-
-void GetRepositoriesMetaInfoJob::setRepositories(const QSet<Repository> &repos)
-{
- m_repositories = repos;
- foreach (const Repository &repo, repos) {
- if (repo.isEnabled())
- m_tmpRepositories += repo;
- }
-}
-
-QHash<QString, QPair<Repository, Repository> > GetRepositoriesMetaInfoJob::repositoryUpdates() const
-{
- return m_repositoryUpdates;
-}
-
QStringList GetRepositoriesMetaInfoJob::temporaryDirectories() const
{
return m_repositoryByTemporaryDirectory.keys();
@@ -111,7 +93,6 @@ void GetRepositoriesMetaInfoJob::reset()
m_haveIgnoredError = false;
m_repositories.clear();
- m_tmpRepositories.clear();
m_tempDirDeleter.releaseAndDeleteAll();
m_repositoryByTemporaryDirectory.clear();
@@ -129,6 +110,14 @@ bool GetRepositoriesMetaInfoJob::isCanceled() const
void GetRepositoriesMetaInfoJob::doStart()
{
+ if ((m_corePrivate->isInstaller() && !m_corePrivate->isOfflineOnly())
+ || (m_corePrivate->isUpdater() || m_corePrivate->isPackageManager())) {
+ foreach (const Repository &repo, m_corePrivate->m_settings.repositories()) {
+ if (repo.isEnabled())
+ m_repositories += repo;
+ }
+ }
+
fetchNextRepo();
}
@@ -151,7 +140,7 @@ void GetRepositoriesMetaInfoJob::fetchNextRepo()
return;
}
- if (m_tmpRepositories.isEmpty()) {
+ if (m_repositories.isEmpty()) {
if (m_haveIgnoredError)
emitFinishedWithError(QInstaller::UserIgnoreError, m_errorString);
else
@@ -159,12 +148,12 @@ void GetRepositoriesMetaInfoJob::fetchNextRepo()
return;
}
- m_job = new GetRepositoryMetaInfoJob(m_publicKey, this);
+ m_job = new GetRepositoryMetaInfoJob(m_corePrivate, this);
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_tmpRepositories.takeLast());
+ m_job->setRepository(m_repositories.takeLast());
m_job->start();
}
@@ -188,13 +177,6 @@ void GetRepositoriesMetaInfoJob::jobFinished(KDJob *j)
return;
}
- if (job->error() == QInstaller::RepositoryUpdatesReceived) {
- qDebug() << job->errorString();
- m_repositoryUpdates = job->repositoryUpdates();
- emitFinishedWithError(job->error(), job->errorString());
- return;
- }
-
if (job->error() == QInstaller::UserIgnoreError) {
m_haveIgnoredError = true;
m_errorString = job->errorString();
@@ -203,5 +185,11 @@ void GetRepositoriesMetaInfoJob::jobFinished(KDJob *j)
job->m_tempDirDeleter.passAndRelease(m_tempDirDeleter, tmpdir);
m_repositoryByTemporaryDirectory.insert(tmpdir, job->repository());
}
- QMetaObject::invokeMethod(this, "fetchNextRepo", Qt::QueuedConnection);
+
+ if (job->error() == QInstaller::RepositoryUpdatesReceived) {
+ reset();
+ QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection);
+ } else {
+ QMetaObject::invokeMethod(this, "fetchNextRepo", Qt::QueuedConnection);
+ }
}
diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h
index cf6a3b645..e7b403100 100644
--- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h
+++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h
@@ -45,17 +45,14 @@ namespace KDUpdater {
namespace QInstaller {
class GetRepositoryMetaInfoJob;
+class PackageManagerCorePrivate;
class INSTALLER_EXPORT GetRepositoriesMetaInfoJob : public KDJob
{
Q_OBJECT
public:
- explicit GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent = 0);
-
- QSet<Repository> repositories() const;
- void setRepositories(const QSet<Repository> &repositories);
- QHash<QString, QPair<Repository, Repository> > repositoryUpdates() const;
+ explicit GetRepositoriesMetaInfoJob(PackageManagerCorePrivate *corePrivate);
QStringList temporaryDirectories() const;
QStringList releaseTemporaryDirectories() const;
@@ -77,18 +74,16 @@ private Q_SLOTS:
void jobFinished(KDJob*);
private:
- QPointer<GetRepositoryMetaInfoJob> m_job;
- const QByteArray m_publicKey;
bool m_canceled;
int m_silentRetries;
- QSet<Repository> m_repositories;
- QList<Repository> m_tmpRepositories;
- QHash<QString, Repository> m_repositoryByTemporaryDirectory;
bool m_haveIgnoredError;
+ PackageManagerCorePrivate *m_corePrivate;
+
QString m_errorString;
+ QList<Repository> m_repositories;
mutable TempDirDeleter m_tempDirDeleter;
-
- QHash<QString, QPair<Repository, Repository> > m_repositoryUpdates;
+ QPointer<GetRepositoryMetaInfoJob> m_job;
+ QHash<QString, Repository> m_repositoryByTemporaryDirectory;
};
} // namespace QInstaller
diff --git a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp
index 7ccf9eaf7..84d97c372 100644
--- a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp
+++ b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp
@@ -37,6 +37,7 @@
#include "cryptosignatureverifier.h"
#include "lib7z_facade.h"
#include "messageboxhandler.h"
+#include "packagemanagercore_p.h"
#include "qinstallerglobal.h"
#include <kdupdaterfiledownloader.h>
@@ -112,14 +113,15 @@ private:
// -- GetRepositoryMetaInfoJob
-GetRepositoryMetaInfoJob::GetRepositoryMetaInfoJob(const QByteArray &publicKey, QObject *parent)
+GetRepositoryMetaInfoJob::GetRepositoryMetaInfoJob(PackageManagerCorePrivate *corePrivate, QObject *parent)
: KDJob(parent),
m_canceled(false),
m_silentRetries(3),
m_retriesLeft(m_silentRetries),
- m_publicKey(publicKey),
+ m_publicKey(corePrivate->m_settings.publicKey()),
m_downloader(0),
- m_waitForDone(false)
+ m_waitForDone(false),
+ m_corePrivate(corePrivate)
{
setCapabilities(Cancelable);
}
@@ -151,11 +153,6 @@ void GetRepositoryMetaInfoJob::setSilentRetries(int retries)
m_silentRetries = retries;
}
-QHash<QString, QPair<Repository, Repository> > GetRepositoryMetaInfoJob::repositoryUpdates() const
-{
- return m_repositoryUpdates;
-}
-
void GetRepositoryMetaInfoJob::doStart()
{
m_retriesLeft = m_silentRetries;
@@ -284,11 +281,10 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished()
emit infoMessage(this, tr("Parsing component meta information..."));
const QDomElement root = doc.documentElement();
-
- m_repositoryUpdates.clear();
// search for additional repositories that we might need to check
const QDomNode repositoryUpdate = root.firstChildElement(QLatin1String("RepositoryUpdate"));
if (!repositoryUpdate.isNull()) {
+ QHash<QString, QPair<Repository, Repository> > repositoryUpdates;
const QDomNodeList children = repositoryUpdate.toElement().childNodes();
for (int i = 0; i < children.count(); ++i) {
const QDomElement el = children.at(i).toElement();
@@ -299,13 +295,13 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished()
Repository repository(el.attribute(QLatin1String("url")), true);
repository.setUsername(el.attribute(QLatin1String("username")));
repository.setPassword(el.attribute(QLatin1String("password")));
- m_repositoryUpdates.insertMulti(action, qMakePair(repository, Repository()));
+ repositoryUpdates.insertMulti(action, qMakePair(repository, Repository()));
- qDebug() << "Added new repository:" << repository.url().toString();
+ qDebug() << "Repository to add:" << repository.url().toString();
} else if (action == QLatin1String("remove")) {
// remove possible default repositories using the given server url
Repository repository(el.attribute(QLatin1String("url")), true);
- m_repositoryUpdates.insertMulti(action, qMakePair(repository, Repository()));
+ repositoryUpdates.insertMulti(action, qMakePair(repository, Repository()));
qDebug() << "Repository to remove:" << repository.url().toString();
} else if (action == QLatin1String("replace")) {
@@ -316,7 +312,7 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished()
newRepository.setPassword(el.attribute(QLatin1String("password")));
// store the new repository and the one old it replaces
- m_repositoryUpdates.insertMulti(action, qMakePair(newRepository, oldRepository));
+ repositoryUpdates.insertMulti(action, qMakePair(newRepository, oldRepository));
qDebug() << "Replace repository:" << oldRepository.url().toString() << "with:"
<< newRepository.url().toString();
} else {
@@ -326,9 +322,14 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished()
}
}
- if (!m_repositoryUpdates.isEmpty()) {
- finished(QInstaller::RepositoryUpdatesReceived, tr("Repository updates received."));
- return;
+ if (!repositoryUpdates.isEmpty()) {
+ if (m_corePrivate->m_settings.updateDefaultRepositories(repositoryUpdates)
+ == Settings::UpdatesApplied) {
+ if (m_corePrivate->isUpdater() || m_corePrivate->isPackageManager())
+ m_corePrivate->writeMaintenanceConfigFiles();
+ finished(QInstaller::RepositoryUpdatesReceived, tr("Repository updates received."));
+ return;
+ }
}
}
diff --git a/installerbuilder/libinstaller/getrepositorymetainfojob.h b/installerbuilder/libinstaller/getrepositorymetainfojob.h
index 75f8794fd..64467887d 100644
--- a/installerbuilder/libinstaller/getrepositorymetainfojob.h
+++ b/installerbuilder/libinstaller/getrepositorymetainfojob.h
@@ -28,7 +28,6 @@
#include <kdjob.h>
-#include <QtCore/QHash>
#include <QtCore/QPointer>
#include <QtCore/QString>
#include <QtCore/QStringList>
@@ -46,6 +45,7 @@ namespace KDUpdater {
namespace QInstaller {
class GetRepositoriesMetaInfoJob;
+class PackageManagerCorePrivate;
class INSTALLER_EXPORT GetRepositoryMetaInfoJob : public KDJob
{
@@ -54,7 +54,7 @@ class INSTALLER_EXPORT GetRepositoryMetaInfoJob : public KDJob
friend class QInstaller::GetRepositoriesMetaInfoJob;
public:
- explicit GetRepositoryMetaInfoJob(const QByteArray &publicKey = QByteArray(), QObject *parent = 0);
+ explicit GetRepositoryMetaInfoJob(PackageManagerCorePrivate *corePrivate, QObject *parent = 0);
~GetRepositoryMetaInfoJob();
Repository repository() const;
@@ -66,8 +66,6 @@ public:
QString temporaryDirectory() const;
QString releaseTemporaryDirectory() const;
- QHash<QString, QPair<Repository, Repository> > repositoryUpdates() const;
-
private:
/* reimp */ void doStart();
/* reimp */ void doCancel();
@@ -103,8 +101,7 @@ private:
bool m_waitForDone;
QThreadPool m_threadPool;
-
- QHash<QString, QPair<Repository, Repository> > m_repositoryUpdates;
+ PackageManagerCorePrivate *m_corePrivate;
};
} // namespace QInstaller
diff --git a/installerbuilder/libinstaller/packagemanagercore_p.cpp b/installerbuilder/libinstaller/packagemanagercore_p.cpp
index 6232de7a8..928c2363e 100644
--- a/installerbuilder/libinstaller/packagemanagercore_p.cpp
+++ b/installerbuilder/libinstaller/packagemanagercore_p.cpp
@@ -598,7 +598,7 @@ void PackageManagerCorePrivate::initialize()
}
if (!m_repoMetaInfoJob) {
- m_repoMetaInfoJob = new GetRepositoriesMetaInfoJob(m_settings.publicKey(), this);
+ m_repoMetaInfoJob = new GetRepositoriesMetaInfoJob(this);
m_repoMetaInfoJob->setAutoDelete(false);
connect(m_repoMetaInfoJob, SIGNAL(infoMessage(KDJob*, QString)), this, SLOT(infoMessage(KDJob*,
QString)));
@@ -2032,9 +2032,6 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories()
m_updateSourcesAdded = false;
m_repoMetaInfoJob->reset();
- if ((isInstaller() && !m_core->isOfflineOnly()) || (isUpdater() || isPackageManager()))
- m_repoMetaInfoJob->setRepositories(m_settings.repositories());
-
try {
m_repoMetaInfoJob->start();
m_repoMetaInfoJob->waitForFinished();
@@ -2047,15 +2044,6 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories()
switch (m_repoMetaInfoJob->error()) {
case QInstaller::UserIgnoreError:
break; // we can simply ignore this error, the user knows about it
-
- case QInstaller::RepositoryUpdatesReceived:
- if (m_settings.updateDefaultRepositories(m_repoMetaInfoJob->repositoryUpdates())
- == Settings::UpdatesApplied) {
- fetchMetaInformationFromRepositories(); // start over, we might have complete new repos
- return m_repoFetched;
- }
- break;
-
default:
setStatus(PackageManagerCore::Failure, m_repoMetaInfoJob->errorString());
return m_repoFetched;