From fbe43e6a267389aebacd08b0d3965ee29f7b0c4c Mon Sep 17 00:00:00 2001
From: Individual IT Services <info@individual-it.net>
Date: Thu, 10 Sep 2015 10:05:07 +0545
Subject: [PATCH] cache result of \OCP\Util::needUpgrade()

reduce calls of \OCP\Util::needUpgrade()
where \OCP\Util::needUpgrade() is called we can call as well
self::checkUpgrade and use the cached result
In line 877 the call way unnecessary anyway because of the first part of
the if statement

move caching to \OCP\Util::needUpgrade

renaming variable

fixing testNeedUpgradeCore()

cache result of checkUpgrade() in self::$needUpgrade

reduce calls of \OCP\Util::needUpgrade()
where \OCP\Util::needUpgrade() is called we can call as well
self::checkUpgrade and use the cached result
In line 877 the call way unnecessary anyway because of the first part of
the if statement

move caching to \OCP\Util::needUpgrade

renaming variable

fixing testNeedUpgradeCore()

fix typo in variable name

deleting tabs
---
 lib/base.php        | 11 +++++------
 lib/public/util.php |  6 +++++-
 tests/lib/util.php  |  2 ++
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index 32b90cad1fa..889801f9653 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -237,7 +237,7 @@ class OC {
 		// Check if config is writable
 		$configFileWritable = is_writable($configFilePath);
 		if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
-			|| !$configFileWritable && \OCP\Util::needUpgrade()) {
+			|| !$configFileWritable && self::checkUpgrade(false)) {
 			if (self::$CLI) {
 				echo $l->t('Cannot write into "config" directory!')."\n";
 				echo $l->t('This can usually be fixed by giving the webserver write access to the config directory')."\n";
@@ -678,7 +678,7 @@ class OC {
 	 */
 	public static function registerCacheHooks() {
 		//don't try to do this before we are properly setup
-		if (\OC::$server->getSystemConfig()->getValue('installed', false) && !\OCP\Util::needUpgrade()) {
+		if (\OC::$server->getSystemConfig()->getValue('installed', false) && !self::checkUpgrade(false)) {
 
 			// NOTE: This will be replaced to use OCP
 			$userSession = self::$server->getUserSession();
@@ -714,7 +714,7 @@ class OC {
 	 */
 	public static function registerLogRotate() {
 		$systemConfig = \OC::$server->getSystemConfig();
-		if ($systemConfig->getValue('installed', false) && $systemConfig->getValue('log_rotate_size', false) && !\OCP\Util::needUpgrade()) {
+		if ($systemConfig->getValue('installed', false) && $systemConfig->getValue('log_rotate_size', false) && !self::checkUpgrade(false)) {
 			//don't try to do this before we are properly setup
 			//use custom logfile path if defined, otherwise use default of owncloud.log in data directory
 			\OCP\BackgroundJob::registerJob('OC\Log\Rotate', $systemConfig->getValue('logfile', $systemConfig->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/owncloud.log'));
@@ -807,8 +807,7 @@ class OC {
 
 		// Load minimum set of apps
 		if (!self::checkUpgrade(false)
-			&& !$systemConfig->getValue('maintenance', false)
-			&& !\OCP\Util::needUpgrade()) {
+			&& !$systemConfig->getValue('maintenance', false)) {
 			// For logged-in users: Load everything
 			if(OC_User::isLoggedIn()) {
 				OC_App::loadApps();
@@ -821,7 +820,7 @@ class OC {
 
 		if (!self::$CLI and (!isset($_GET["logout"]) or ($_GET["logout"] !== 'true'))) {
 			try {
-				if (!$systemConfig->getValue('maintenance', false) && !\OCP\Util::needUpgrade()) {
+				if (!$systemConfig->getValue('maintenance', false) && !self::checkUpgrade(false)) {
 					OC_App::loadApps(array('filesystem', 'logging'));
 					OC_App::loadApps();
 				}
diff --git a/lib/public/util.php b/lib/public/util.php
index 652df5192cf..1ba091d1952 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -654,6 +654,7 @@ class Util {
 		return \OC_Util::isDefaultExpireDateEnforced();
 	}
 
+	protected static $needUpgradeCache = null;
 
 	/**
 	 * Checks whether the current version needs upgrade.
@@ -662,6 +663,9 @@ class Util {
 	 * @since 7.0.0
 	 */
 	public static function needUpgrade() {
-		return \OC_Util::needUpgrade(\OC::$server->getConfig());
+		if (!isset(self::$needUpgradeCache)) {
+			self::$needUpgradeCache=\OC_Util::needUpgrade(\OC::$server->getConfig());
+		}		
+		return self::$needUpgradeCache;
 	}
 }
diff --git a/tests/lib/util.php b/tests/lib/util.php
index b9b8062653e..49579b3b6bd 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -406,11 +406,13 @@ class Test_Util extends \Test\TestCase {
 
 		OC_Config::setValue('version', '7.0.0.0');
 		\OC::$server->getSession()->set('OC_Version', array(7, 0, 0, 1));
+		self::invokePrivate(new \OCP\Util, 'needUpgradeCache', array(null));
 
 		$this->assertTrue(\OCP\Util::needUpgrade());
 
 		OC_Config::setValue('version', $oldConfigVersion);
 		$oldSessionVersion = \OC::$server->getSession()->set('OC_Version', $oldSessionVersion);
+		self::invokePrivate(new \OCP\Util, 'needUpgradeCache', array(null));
 
 		$this->assertFalse(\OCP\Util::needUpgrade());
 	}
-- 
GitLab