From 266c8c08935918632907d222fcfced0fb1e1b7cc Mon Sep 17 00:00:00 2001 From: kh1 Date: Tue, 13 Aug 2013 13:49:46 +0200 Subject: Force updating of Essential components. Task-number: QTIFW-38 Task-number: QTIFW-155 This is necessary for correct functioning of the Maintenance Tool. Change-Id: I3844760bdd31abf547c660f82dda14a3da38c5da Reviewed-by: Niels Weber Reviewed-by: Leena Miettinen Reviewed-by: Tim Jenssen --- src/libs/installer/extractarchiveoperation_p.h | 8 ++++-- src/libs/installer/packagemanagercore.cpp | 38 ++++++++++++++++++++++++-- src/libs/installer/packagemanagercore.h | 3 +- src/libs/installer/scriptengine.cpp | 2 ++ 4 files changed, 44 insertions(+), 7 deletions(-) (limited to 'src/libs/installer') diff --git a/src/libs/installer/extractarchiveoperation_p.h b/src/libs/installer/extractarchiveoperation_p.h index 44e75a949..4e0632830 100644 --- a/src/libs/installer/extractarchiveoperation_p.h +++ b/src/libs/installer/extractarchiveoperation_p.h @@ -117,9 +117,11 @@ public Q_SLOTS: case PackageManagerCore::Failure: state = E_FAIL; break; - case PackageManagerCore::Unfinished: // fall through - case PackageManagerCore::Success: - case PackageManagerCore::Running: + default: // fall through + // PackageManagerCore::Unfinished, PackageManagerCore::Success, PackageManagerCore::Running + // PackageManagerCore::ForceUpdate + + // already set //state = S_OK; break; } diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 3030777f8..36c16e87a 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -887,9 +887,39 @@ bool PackageManagerCore::fetchRemotePackagesTree() return false; bool success = false; - if (!isUpdater()) + if (!isUpdater()) { success = fetchAllPackages(packages, installedPackages); - else { + if (success && !d->statusCanceledOrFailed() && isPackageManager()) { + foreach (Package *const update, packages) { + if (update->data(scEssential, scFalse).toString().toLower() == scTrue) { + const QString name = update->data(scName).toString(); + if (!installedPackages.contains(name)) { + success = false; + break; // unusual, the maintenance tool should always be available + } + + const LocalPackage localPackage = installedPackages.value(name); + const QString updateVersion = update->data(scRemoteVersion).toString(); + if (KDUpdater::compareVersion(updateVersion, localPackage.version) <= 0) + break; // remote version equals or is less than the installed maintenance tool + + const QDate updateDate = update->data(scReleaseDate).toDate(); + if (localPackage.lastUpdateDate >= updateDate) + break; // remote release date equals or is less than the installed maintenance tool + + success = false; + break; // we found a newer version of the maintenance tool + } + } + + if (!success && !d->statusCanceledOrFailed()) { + updateDisplayVersions(scRemoteDisplayVersion); + d->setStatus(ForceUpdate, tr("There is an important update available, please run the " + "updater first.")); + return false; + } + } + } else { success = fetchUpdaterPackages(packages, installedPackages); } @@ -2185,7 +2215,9 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const } } - if (!isValidUpdate) + // break if the update is not valid and if it's not the maintenance tool (we might get an update + // for the maintenance tool even if it's not currently installed - possible offline installation) + if (!isValidUpdate && (update->data(scEssential, scFalse).toString().toLower() == scFalse)) continue; // Update for not installed package found, skip it. const LocalPackage &localPackage = locals.value(name); diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index 24fbc4d64..20a3293fa 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -82,7 +82,8 @@ public: Failure = EXIT_FAILURE, Running, Canceled, - Unfinished + Unfinished, + ForceUpdate }; Status status() const; QString error() const; diff --git a/src/libs/installer/scriptengine.cpp b/src/libs/installer/scriptengine.cpp index 9ff8ae75e..b6a8a971a 100644 --- a/src/libs/installer/scriptengine.cpp +++ b/src/libs/installer/scriptengine.cpp @@ -402,6 +402,8 @@ QScriptValue ScriptEngine::generateQInstallerObject() qinstaller.setProperty(QLatin1String("Failure"), PackageManagerCore::Failure); qinstaller.setProperty(QLatin1String("Running"), PackageManagerCore::Running); qinstaller.setProperty(QLatin1String("Canceled"), PackageManagerCore::Canceled); + qinstaller.setProperty(QLatin1String("Unfinished"), PackageManagerCore::Unfinished); + qinstaller.setProperty(QLatin1String("ForceUpdate"), PackageManagerCore::ForceUpdate); return qinstaller; } -- cgit v1.2.3