From 10de4a7b904fe472a240dd4d35d83daa919e6a1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 13 Jun 2014 13:26:09 +0200
Subject: [PATCH] move creation of / and users 'files' from storage constructor
 to setupFS / mount initialization

---
 lib/private/files/filesystem.php                    |  8 ++++++++
 .../files/objectstore/abstractobjectstore.php       | 11 -----------
 lib/private/util.php                                | 13 +++++++++++--
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index 5fb345c87f..f5a7060ec9 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -343,6 +343,14 @@ class Filesystem {
 				$homeStorage['arguments']['legacy'] = true;
 			}
 			self::mount($homeStorage['class'], $homeStorage['arguments'], $user);
+
+			$home = \OC\Files\Filesystem::getStorage($user);
+			if ( $home->instanceOfStorage('\OC\Files\ObjectStore\AbstractObjectStore') ) {
+				//create the files folder in the cache when mounting the objectstore for a user
+				if ( ! $home->is_dir('files') ) {
+					$home->mkdir('files');
+				}
+			}
 		}
 		else {
 			self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
diff --git a/lib/private/files/objectstore/abstractobjectstore.php b/lib/private/files/objectstore/abstractobjectstore.php
index 2ef2f38bf4..3f67ad9a49 100644
--- a/lib/private/files/objectstore/abstractobjectstore.php
+++ b/lib/private/files/objectstore/abstractobjectstore.php
@@ -131,17 +131,6 @@ abstract class AbstractObjectStore extends \OC\Files\Storage\Common {
 		} else {
 			$this->user = null;
 		}
-		//initialize cache with root directory in cache
-		if ( ! $this->is_dir('/') ) {
-			$this->mkdir('/');
-		}
-
-		if (isset($params['user']) && is_object($params['user'])) {
-			//create the files folder in the cache when mounting the objectstore for a user
-			if ( ! $this->is_dir('files') ) {
-				$this->mkdir('files');
-			}
-		}
 	}
 
 	public function mkdir($path) {
diff --git a/lib/private/util.php b/lib/private/util.php
index c2db9e5773..435a291455 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -110,8 +110,17 @@ class OC_Util {
 
 			$userDir = '/'.$user.'/files';
 
-			//autocreate users "home" directory for local storage only
-			if ( ! isset( $root_storage ) ) {
+			//autocreate users "home" directory
+			if ( isset( $root_storage ) ) {
+				$root = \OC\Files\Filesystem::getStorage('/');
+				if ( $root->instanceOfStorage('\OC\Files\ObjectStore\AbstractObjectStore') ) {
+					//initialize cache with root directory in cache
+					if ( ! $root->is_dir('/') ) {
+						$root->mkdir('/');
+					}
+				}
+			} else {
+				//copy skeleton for local storage only
 				$userRoot = OC_User::getHome($user);
 				$userDirectory = $userRoot . '/files';
 				if( !is_dir( $userDirectory )) {
-- 
GitLab