Merge pull request #6743 from nextcloud/invalid-path-repair-from11-12

[12] dont run invalid path repair step when upgrading from 11.0.5.2 and later
This commit is contained in:
Robin Appelman 2017-10-04 15:08:34 +02:00 committed by GitHub
commit 6aa25b9f1e
2 changed files with 41 additions and 3 deletions

View File

@ -162,10 +162,18 @@ class RepairInvalidPaths implements IRepairStep {
return $count; return $count;
} }
public function run(IOutput $output) { private function shouldRun() {
$versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0');
// was added to 12.0.0.30 and 13.0.0.1
if (version_compare($versionFromBeforeUpdate, '12.0.0.30', '<') || version_compare($versionFromBeforeUpdate, '13.0.0.0', '==')) { // was added to 11.0.5.2, 12.0.0.30 and 13.0.0.1
$shouldRun = version_compare($versionFromBeforeUpdate, '11.0.5.2', '<');
$shouldRun |= version_compare($versionFromBeforeUpdate, '12.0.0.0', '>=') && version_compare($versionFromBeforeUpdate, '12.0.0.30', '<');
$shouldRun |= version_compare($versionFromBeforeUpdate, '13.0.0.0', '==');
return $shouldRun;
}
public function run(IOutput $output) {
if ($this->shouldRun()) {
$count = $this->repair(); $count = $this->repair();
$output->info('Repaired ' . $count . ' paths'); $output->info('Repaired ' . $count . ' paths');

View File

@ -186,4 +186,34 @@ class RepairInvalidPathsTest extends TestCase {
$this->assertEquals($folderId, $this->cache2->get('foo2/bar/asd')['parent']); $this->assertEquals($folderId, $this->cache2->get('foo2/bar/asd')['parent']);
$this->assertEquals($folderId, $this->cache2->getId('foo2/bar')); $this->assertEquals($folderId, $this->cache2->getId('foo2/bar'));
} }
public function shouldRunDataProvider() {
return [
['11.0.0.0', true],
['11.0.0.31', true],
['11.0.5.2', false],
['12.0.0.0', true],
['12.0.0.1', true],
['12.0.0.31', false],
['13.0.0.0', true],
['13.0.0.1', false]
];
}
/**
* @dataProvider shouldRunDataProvider
*
* @param string $from
* @param boolean $expected
*/
public function testShouldRun($from, $expected) {
$config = $this->createMock(IConfig::class);
$config->expects($this->any())
->method('getSystemValue')
->with('version', '0.0.0')
->willReturn($from);
$repair = new RepairInvalidPaths(\OC::$server->getDatabaseConnection(), $config);
$this->assertEquals($expected, $this->invokePrivate($repair, 'shouldRun'));
}
} }