From 5c343464799346a1caf0cd6540e7d6510df255c6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 22 Jul 2016 14:44:00 +0200 Subject: Allow downgrades of maintenance accross vendors --- lib/private/Updater.php | 29 ++++++++++++++++++++++++++++- lib/private/legacy/app.php | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/private/Updater.php b/lib/private/Updater.php index 0a6d9c9a31d..609e965bfad 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -183,6 +183,18 @@ class Updater extends BasicEmitter { return implode('.', $OC_VersionCanBeUpgradedFrom); } + /** + * Return vendor from which this version was published + * + * @return string Get the vendor + */ + private function getVendor() { + // this should really be a JSON file + require \OC::$SERVERROOT . '/version.php'; + /** @var string $vendor */ + return (string) $vendor; + } + /** * Whether an upgrade to a specified version is possible * @param string $oldVersion @@ -191,8 +203,22 @@ class Updater extends BasicEmitter { * @return bool */ public function isUpgradePossible($oldVersion, $newVersion, $allowedPreviousVersion) { - return (version_compare($allowedPreviousVersion, $oldVersion, '<=') + $allowedUpgrade = (version_compare($allowedPreviousVersion, $oldVersion, '<=') && (version_compare($oldVersion, $newVersion, '<=') || $this->config->getSystemValue('debug', false))); + + if ($allowedUpgrade) { + return $allowedUpgrade; + } + + // Upgrade not allowed, someone switching vendor? + if ($this->getVendor() !== $this->config->getAppValue('core', 'vendor', '')) { + $oldVersion = explode('.', $oldVersion); + $newVersion = explode('.', $newVersion); + + return $oldVersion[0] === $newVersion[0] && $oldVersion[1] === $newVersion[1]; + } + + return false; } /** @@ -279,6 +305,7 @@ class Updater extends BasicEmitter { // only set the final version if everything went well $this->config->setSystemValue('version', implode('.', \OCP\Util::getVersion())); + $this->config->setAppValue('core', 'vendor', $this->getVendor()); } } diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 4cfa68cff2d..b0f28498ff7 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -989,7 +989,7 @@ class OC_App { $currentVersion = OC_App::getAppVersion($app); if ($currentVersion && isset($versions[$app])) { $installedVersion = $versions[$app]; - if (version_compare($currentVersion, $installedVersion, '>')) { + if (!version_compare($currentVersion, $installedVersion, '=')) { return true; } } -- cgit v1.2.3