From 2f4bebb045be8605742ed566b07dfcbf4be1fde8 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
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
-- 
GitLab