From 2f4bebb045be8605742ed566b07dfcbf4be1fde8 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Thu, 30 Jul 2015 15:43:15 +0200 Subject: [PATCH] only update database on the first run (first run = we have a version number from the old encryption app) --- apps/encryption/lib/migration.php | 26 +++++++++++++++------ apps/encryption/tests/lib/MigrationTest.php | 3 +++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/encryption/lib/migration.php b/apps/encryption/lib/migration.php index 789f5f77757..d22c571fd40 100644 --- a/apps/encryption/lib/migration.php +++ b/apps/encryption/lib/migration.php @@ -37,9 +37,10 @@ class Migration { private $connection; /** @var IConfig */ private $config; - /** @var ILogger */ private $logger; + /** @var string*/ + protected $installedVersion; /** * @param IConfig $config @@ -54,6 +55,7 @@ class Migration { $this->moduleId = \OCA\Encryption\Crypto\Encryption::ID; $this->config = $config; $this->logger = $logger; + $this->installedVersion = $this->config->getAppValue('files_encryption', 'installed_version', '-1'); } public function finalCleanUp() { @@ -66,12 +68,16 @@ class Migration { * update file cache, copy unencrypted_size to the 'size' column */ private function updateFileCache() { - $query = $this->connection->getQueryBuilder(); - $query->update('*PREFIX*filecache') - ->set('size', 'unencrypted_size') - ->where($query->expr()->eq('encrypted', $query->createParameter('encrypted'))) - ->setParameter('encrypted', 1); - $query->execute(); + // make sure that we don't update the file cache multiple times + // only update during the first run + if ($this->installedVersion !== '-1') { + $query = $this->connection->getQueryBuilder(); + $query->update('*PREFIX*filecache') + ->set('size', 'unencrypted_size') + ->where($query->expr()->eq('encrypted', $query->createParameter('encrypted'))) + ->setParameter('encrypted', 1); + $query->execute(); + } } /** @@ -144,6 +150,12 @@ class Migration { */ public function updateDB() { + // make sure that we don't update the file cache multiple times + // only update during the first run + if ($this->installedVersion === '-1') { + return; + } + // delete left-over from old encryption which is no longer needed $this->config->deleteAppValue('files_encryption', 'ocsid'); $this->config->deleteAppValue('files_encryption', 'types'); diff --git a/apps/encryption/tests/lib/MigrationTest.php b/apps/encryption/tests/lib/MigrationTest.php index a05418c5f26..5bc3b89b5b9 100644 --- a/apps/encryption/tests/lib/MigrationTest.php +++ b/apps/encryption/tests/lib/MigrationTest.php @@ -306,6 +306,7 @@ class MigrationTest extends \Test\TestCase { $this->prepareDB(); $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger); + $this->invokePrivate($m, 'installedVersion', ['0.7']); $m->updateDB(); $this->verifyDB('*PREFIX*appconfig', 'files_encryption', 0); @@ -325,6 +326,7 @@ class MigrationTest extends \Test\TestCase { $config->setUserValue(self::TEST_ENCRYPTION_MIGRATION_USER1, 'encryption', 'recoverKeyEnabled', '9'); $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger); + $this->invokePrivate($m, 'installedVersion', ['0.7']); $m->updateDB(); $this->verifyDB('*PREFIX*appconfig', 'files_encryption', 0); @@ -388,6 +390,7 @@ class MigrationTest extends \Test\TestCase { public function testUpdateFileCache() { $this->prepareFileCache(); $m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger); + $this->invokePrivate($m, 'installedVersion', ['0.7']); self::invokePrivate($m, 'updateFileCache'); // check results