From 4608f8a3b5f3f88ce033817f682103c31f8a934f Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Thu, 24 Jul 2014 17:16:34 +0200
Subject: [PATCH] Throw an exception when we try to load an app that needs to
 be upgraded

---
 lib/private/app.php                         | 38 +++------------------
 lib/private/needsupdateexception.php        | 12 +++++++
 lib/private/serviceunavailableexception.php | 12 +++++++
 3 files changed, 28 insertions(+), 34 deletions(-)
 create mode 100644 lib/private/needsupdateexception.php
 create mode 100644 lib/private/serviceunavailableexception.php

diff --git a/lib/private/app.php b/lib/private/app.php
index 7bf04f1126..603bc0104e 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -81,10 +81,13 @@ class OC_App {
 	 * load a single app
 	 *
 	 * @param string $app
+	 * @throws \OC\NeedsUpdateException
 	 */
 	public static function loadApp($app) {
 		if (is_file(self::getAppPath($app) . '/appinfo/app.php')) {
-			self::checkUpgrade($app);
+			if (self::shouldUpgrade($app)) {
+				throw new \OC\NeedsUpdateException();
+			}
 			require_once $app . '/appinfo/app.php';
 		}
 	}
@@ -954,39 +957,6 @@ class OC_App {
 		return false;
 	}
 
-	/**
-	 * check if the app needs updating and update when needed
-	 *
-	 * @param string $app
-	 */
-	public static function checkUpgrade($app) {
-		if (in_array($app, self::$checkedApps)) {
-			return;
-		}
-		self::$checkedApps[] = $app;
-		if (!self::shouldUpgrade($app)) {
-			return;
-		}
-		$versions = self::getAppVersions();
-		$installedVersion = $versions[$app];
-		$currentVersion = OC_App::getAppVersion($app);
-		OC_Log::write(
-			$app,
-			'starting app upgrade from ' . $installedVersion . ' to ' . $currentVersion,
-			OC_Log::DEBUG
-		);
-		$info = self::getAppInfo($app);
-		try {
-			OC_App::updateApp($app);
-			OC_Hook::emit('update', 'success', 'Updated ' . $info['name'] . ' app');
-		} catch (Exception $e) {
-			OC_Hook::emit('update', 'failure', 'Failed to update ' . $info['name'] . ' app: ' . $e->getMessage());
-			$l = OC_L10N::get('lib');
-			throw new RuntimeException($l->t('Failed to upgrade "%s".', array($app)), 0, $e);
-		}
-		OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app));
-	}
-
 	/**
 	 * check if the current enabled apps are compatible with the current
 	 * ownCloud version. disable them if not.
diff --git a/lib/private/needsupdateexception.php b/lib/private/needsupdateexception.php
new file mode 100644
index 0000000000..bab928dc30
--- /dev/null
+++ b/lib/private/needsupdateexception.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class NeedsUpdateException extends ServiceUnavailableException {
+}
diff --git a/lib/private/serviceunavailableexception.php b/lib/private/serviceunavailableexception.php
new file mode 100644
index 0000000000..15e4cd5c2f
--- /dev/null
+++ b/lib/private/serviceunavailableexception.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+class ServiceUnavailableException extends \Exception {
+}
-- 
GitLab