]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow downgrades for our brave developers, that switch between branches
authorJoas Schilling <nickvergessen@owncloud.com>
Thu, 7 Jan 2016 13:13:46 +0000 (14:13 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Thu, 7 Jan 2016 13:18:33 +0000 (14:18 +0100)
lib/private/updater.php
lib/private/util.php
tests/lib/updater.php

index 04f8dcf72263758e020097e302192d788a0ee288..9ec72bab2f94203d4c2881a981c1b1535b36df06 100644 (file)
@@ -256,7 +256,7 @@ class Updater extends BasicEmitter {
         */
        public function isUpgradePossible($oldVersion, $newVersion, $allowedPreviousVersion) {
                return (version_compare($allowedPreviousVersion, $oldVersion, '<=')
-                       && version_compare($oldVersion, $newVersion, '<='));
+                       && (version_compare($oldVersion, $newVersion, '<=') || $this->config->getSystemValue('debug', false)));
        }
 
        /**
index c9738b29ca1c5c7bf6b68df47ac287b070ab0bc2..6a9980fc1296e5ac58f501144e8ec9fef92db437 100644 (file)
@@ -1483,6 +1483,7 @@ class OC_Util {
         *
         * @param \OCP\IConfig $config
         * @return bool whether the core or any app needs an upgrade
+        * @throws \OC\HintException When the upgrade from the given version is not allowed
         */
        public static function needUpgrade(\OCP\IConfig $config) {
                if ($config->getSystemValue('installed', false)) {
@@ -1491,6 +1492,19 @@ class OC_Util {
                        $versionDiff = version_compare($currentVersion, $installedVersion);
                        if ($versionDiff > 0) {
                                return true;
+                       } else if ($config->getSystemValue('debug', false) && $versionDiff < 0) {
+                               // downgrade with debug
+                               $installedMajor = explode('.', $installedVersion);
+                               $installedMajor = $installedMajor[0] . '.' . $installedMajor[1];
+                               $currentMajor = explode('.', $currentVersion);
+                               $currentMajor = $currentMajor[0] . '.' . $currentMajor[1];
+                               if ($installedMajor === $currentMajor) {
+                                       // Same major, allow downgrade for developers
+                                       return true;
+                               } else {
+                                       // downgrade attempt, throw exception
+                                       throw new \OC\HintException('Downgrading is not supported and is likely to cause unpredictable issues (from ' . $installedVersion . ' to ' . $currentVersion . ')');
+                               }
                        } else if ($versionDiff < 0) {
                                // downgrade attempt, throw exception
                                throw new \OC\HintException('Downgrading is not supported and is likely to cause unpredictable issues (from ' . $installedVersion . ' to ' . $currentVersion . ')');
index 313ffb65738680ae1b532ac9b6bd277e06d4423b..8ee77b9f81e34b064c838e3bb297bfa188fafdc3 100644 (file)
@@ -27,7 +27,7 @@ use OCP\ILogger;
 use OC\IntegrityCheck\Checker;
 
 class UpdaterTest extends \Test\TestCase {
-       /** @var IConfig */
+       /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
        private $config;
        /** @var HTTPHelper */
        private $httpHelper;
@@ -136,9 +136,33 @@ class UpdaterTest extends \Test\TestCase {
                        ['9.0.0.0', '8.0.0.0', '7.0', false],
                        ['9.1.0.0', '8.0.0.0', '7.0', false],
                        ['8.2.0.0', '8.1.0.0', '8.0', false],
+
+                       // With debug enabled
+                       ['8.0.0.0', '8.2.0.0', '8.1', false, true],
+                       ['8.1.0.0', '8.2.0.0', '8.1', true, true],
+                       ['8.2.0.1', '8.2.0.1', '8.1', true, true],
+                       ['8.3.0.0', '8.2.0.0', '8.1', true, true],
                ];
        }
 
+       /**
+        * @dataProvider versionCompatibilityTestData
+        *
+        * @param string $oldVersion
+        * @param string $newVersion
+        * @param string $allowedVersion
+        * @param bool $result
+        * @param bool $debug
+        */
+       public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false) {
+               $this->config->expects($this->any())
+                       ->method('getSystemValue')
+                       ->with('debug', false)
+                       ->willReturn($debug);
+
+               $this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion));
+       }
+
        public function testSetSimulateStepEnabled() {
                $this->updater->setSimulateStepEnabled(true);
                $this->assertSame(true, $this->invokePrivate($this->updater, 'simulateStepEnabled'));
@@ -160,18 +184,6 @@ class UpdaterTest extends \Test\TestCase {
                $this->assertSame(false, $this->invokePrivate($this->updater, 'skip3rdPartyAppsDisable'));
        }
 
-       /**
-        * @dataProvider versionCompatibilityTestData
-        *
-        * @param string $oldVersion
-        * @param string $newVersion
-        * @param string $allowedVersion
-        * @param bool $result
-        */
-       public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result) {
-               $this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion));
-       }
-
        public function testCheckInCache() {
                $expectedResult = [
                        'version' => '8.0.4.2',