From 994768d99f0c0ea0e50f30774005a75e7533e105 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 3 Nov 2014 13:10:03 +0100
Subject: [PATCH] Update Pimple to V3.0

---
 3rdparty                                      |  2 +-
 lib/base.php                                  |  3 +--
 .../dependencyinjection/dicontainer.php       | 20 +++++++++----------
 .../appframework/utility/simplecontainer.php  |  9 ++++++---
 4 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/3rdparty b/3rdparty
index c37dc06ce2..17cdabdae0 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit c37dc06ce2906813dec3296d1a58c1628c206a31
+Subproject commit 17cdabdae0168bd678f859345b0b20a9ae7c9646
diff --git a/lib/base.php b/lib/base.php
index d428d45d90..7fa53c3a07 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -457,8 +457,7 @@ class OC {
 		// setup 3rdparty autoloader
 		$vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php';
 		if (file_exists($vendorAutoLoad)) {
-			$loader = require_once $vendorAutoLoad;
-			$loader->add('Pimple',OC::$THIRDPARTYROOT . '/3rdparty/Pimple');
+			require_once $vendorAutoLoad;
 		} else {
 			OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE);
 			OC_Template::printErrorPage('Composer autoloader not found, unable to continue.');
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index f7fee34721..98525ed320 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -59,14 +59,14 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 
 		$this->registerParameter('ServerContainer', \OC::$server);
 
-		$this['API'] = $this->share(function($c){
+		$this->registerService('API', function($c){
 			return new API($c['AppName']);
 		});
 
 		/**
 		 * Http
 		 */
-		$this['Request'] = $this->share(function($c) {
+		$this->registerService('Request', function($c) {
 			/** @var $c SimpleContainer */
 			/** @var $server SimpleContainer */
 			$server = $c->query('ServerContainer');
@@ -75,7 +75,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 			return $server->getRequest();
 		});
 
-		$this['Protocol'] = $this->share(function($c){
+		$this->registerService('Protocol', function($c){
 			if(isset($_SERVER['SERVER_PROTOCOL'])) {
 				return new Http($_SERVER, $_SERVER['SERVER_PROTOCOL']);
 			} else {
@@ -83,7 +83,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 			}
 		});
 
-		$this['Dispatcher'] = $this->share(function($c) {
+		$this->registerService('Dispatcher', function($c) {
 			return new Dispatcher(
 				$c['Protocol'],
 				$c['MiddlewareDispatcher'],
@@ -97,7 +97,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 		 * Middleware
 		 */
 		$app = $this;
-		$this['SecurityMiddleware'] = $this->share(function($c) use ($app){
+		$this->registerService('SecurityMiddleware', function($c) use ($app){
 			return new SecurityMiddleware(
 				$c['Request'],
 				$c['ControllerMethodReflector'],
@@ -110,14 +110,14 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 			);
 		});
 
-		$this['CORSMiddleware'] = $this->share(function($c) {
+		$this->registerService('CORSMiddleware', function($c) {
 			return new CORSMiddleware(
 				$c['Request'],
 				$c['ControllerMethodReflector']
 			);
 		});
 
-		$this['SessionMiddleware'] = $this->share(function($c) use ($app) {
+		$this->registerService('SessionMiddleware', function($c) use ($app) {
 			return new SessionMiddleware(
 				$c['Request'],
 				$c['ControllerMethodReflector'],
@@ -126,7 +126,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 		});
 
 		$middleWares = &$this->middleWares;
-		$this['MiddlewareDispatcher'] = $this->share(function($c) use (&$middleWares) {
+		$this->registerService('MiddlewareDispatcher', function($c) use (&$middleWares) {
 			$dispatcher = new MiddlewareDispatcher();
 			$dispatcher->registerMiddleware($c['SecurityMiddleware']);
 			$dispatcher->registerMiddleware($c['CORSMiddleware']);
@@ -143,11 +143,11 @@ class DIContainer extends SimpleContainer implements IAppContainer{
 		/**
 		 * Utilities
 		 */
-		$this['TimeFactory'] = $this->share(function($c){
+		$this->registerService('TimeFactory', function($c){
 			return new TimeFactory();
 		});
 
-		$this['ControllerMethodReflector'] = $this->share(function($c) {
+		$this->registerService('ControllerMethodReflector', function($c) {
 			return new ControllerMethodReflector();
 		});
 
diff --git a/lib/private/appframework/utility/simplecontainer.php b/lib/private/appframework/utility/simplecontainer.php
index a2d90138df..c6effed5b4 100644
--- a/lib/private/appframework/utility/simplecontainer.php
+++ b/lib/private/appframework/utility/simplecontainer.php
@@ -7,7 +7,7 @@ namespace OC\AppFramework\Utility;
  *
  * SimpleContainer is a simple implementation of IContainer on basis of \Pimple
  */
-class SimpleContainer extends \Pimple implements \OCP\IContainer {
+class SimpleContainer extends \Pimple\Container implements \OCP\IContainer {
 
 	/**
 	 * @param string $name name of the service to query for
@@ -35,10 +35,13 @@ class SimpleContainer extends \Pimple implements \OCP\IContainer {
 	 * @param bool $shared
 	 */
 	function registerService($name, \Closure $closure, $shared = true) {
+		if (!empty($this[$name]))  {
+			unset($this[$name]);
+		}
 		if ($shared) {
-			$this[$name] = \Pimple::share($closure);
-		} else {
 			$this[$name] = $closure;
+		} else {
+			$this[$name] = parent::factory($closure);
 		}
 	}
 }
-- 
GitLab