diff options
author | Joas Schilling <coding@schilljs.com> | 2016-07-22 14:44:00 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2016-07-22 14:51:43 +0200 |
commit | 5c343464799346a1caf0cd6540e7d6510df255c6 (patch) | |
tree | 37b3cfdfbf7727636fa07359da2bf7d47715aa9a /lib/private/Updater.php | |
parent | af3950146504fe0a14ef38c24c549ffeda74acf6 (diff) | |
download | nextcloud-server-5c343464799346a1caf0cd6540e7d6510df255c6.tar.gz nextcloud-server-5c343464799346a1caf0cd6540e7d6510df255c6.zip |
Allow downgrades of maintenance accross vendors
Diffstat (limited to 'lib/private/Updater.php')
-rw-r--r-- | lib/private/Updater.php | 29 |
1 files changed, 28 insertions, 1 deletions
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 @@ -184,6 +184,18 @@ class Updater extends BasicEmitter { } /** + * 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 * @param string $newVersion @@ -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()); } } |