diff options
author | kh1 <karsten.heimrich@digia.com> | 2013-08-13 13:49:46 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@digia.com> | 2013-08-14 15:14:44 +0200 |
commit | 266c8c08935918632907d222fcfced0fb1e1b7cc (patch) | |
tree | e4e0b277d09d159bb38057c3e0bb4ba93620ee8e /src/libs/installer/packagemanagercore.cpp | |
parent | 39d88655f7f51a8c7edce1ad5497cb542bae372b (diff) |
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 <niels.weber@digia.com>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'src/libs/installer/packagemanagercore.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
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); |