Selaa lähdekoodia

Allow downgrades of maintenance accross vendors

tags/v11.0RC2
Joas Schilling 7 vuotta sitten
vanhempi
commit
5c34346479
No account linked to committer's email address
4 muutettua tiedostoa jossa 43 lisäystä ja 3 poistoa
  1. 28
    1
      lib/private/Updater.php
  2. 1
    1
      lib/private/legacy/app.php
  3. 12
    1
      tests/lib/UpdaterTest.php
  4. 2
    0
      version.php

+ 28
- 1
lib/private/Updater.php Näytä tiedosto

@@ -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());
}
}


+ 1
- 1
lib/private/legacy/app.php Näytä tiedosto

@@ -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;
}
}

+ 12
- 1
tests/lib/UpdaterTest.php Näytä tiedosto

@@ -137,6 +137,12 @@ class UpdaterTest extends \Test\TestCase {
['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],

// Downgrade of maintenance
['9.0.53.0', '9.0.4.0', '8.1', false, false, 'nextcloud'],
// with vendor switch
['9.0.53.0', '9.0.4.0', '8.1', true, false, ''],
['9.0.53.0', '9.0.4.0', '8.1', true, false, 'owncloud'],
];
}

@@ -148,12 +154,17 @@ class UpdaterTest extends \Test\TestCase {
* @param string $allowedVersion
* @param bool $result
* @param bool $debug
* @param string $vendor
*/
public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false) {
public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false, $vendor = 'nextcloud') {
$this->config->expects($this->any())
->method('getSystemValue')
->with('debug', false)
->willReturn($debug);
$this->config->expects($this->any())
->method('getAppValue')
->with('core', 'vendor', '')
->willReturn($vendor);

$this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion));
}

+ 2
- 0
version.php Näytä tiedosto

@@ -38,3 +38,5 @@ $OC_Channel = 'git';
// The build number
$OC_Build = '';

// Vendor of this package
$vendor = 'nextcloud';

Loading…
Peruuta
Tallenna