summaryrefslogtreecommitdiffstats
path: root/lib/private/Updater.php
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-07-22 14:44:00 +0200
committerJoas Schilling <coding@schilljs.com>2016-07-22 14:51:43 +0200
commit5c343464799346a1caf0cd6540e7d6510df255c6 (patch)
tree37b3cfdfbf7727636fa07359da2bf7d47715aa9a /lib/private/Updater.php
parentaf3950146504fe0a14ef38c24c549ffeda74acf6 (diff)
downloadnextcloud-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.php29
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());
}
}