[Pkg-owncloud-commits] [owncloud] 05/46: make skeleton compatible with objectstore

David Prévot taffit at moszumanska.debian.org
Fri Oct 24 15:11:40 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 92d069ab6cf5ee087fe84439736defdea490abab
Author: Jörn Friedrich Dreyer <jfd at butonic.de>
Date:   Fri Aug 29 14:36:00 2014 +0200

    make skeleton compatible with objectstore
    
    suspend encryption proxy when copying skeleton
---
 apps/files_sharing/tests/base.php                  |  4 +-
 .../files/objectstore/homeobjectstorestorage.php   |  6 ---
 lib/private/server.php                             | 15 ++++++
 lib/private/util.php                               | 55 ++++++++++++----------
 4 files changed, 48 insertions(+), 32 deletions(-)

diff --git a/apps/files_sharing/tests/base.php b/apps/files_sharing/tests/base.php
index 738ba34..84de600 100644
--- a/apps/files_sharing/tests/base.php
+++ b/apps/files_sharing/tests/base.php
@@ -126,9 +126,9 @@ abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
 		}
 
 		\OC_Util::tearDownFS();
-		\OC_User::setUserId('');
+		\OC::$server->getUserSession()->setUser(null);
 		\OC\Files\Filesystem::tearDown();
-		\OC_User::setUserId($user);
+		\OC::$server->getUserSession()->login($user, $password);
 		\OC_Util::setupFS($user);
 	}
 
diff --git a/lib/private/files/objectstore/homeobjectstorestorage.php b/lib/private/files/objectstore/homeobjectstorestorage.php
index 947fc49..14fc604 100644
--- a/lib/private/files/objectstore/homeobjectstorestorage.php
+++ b/lib/private/files/objectstore/homeobjectstorestorage.php
@@ -34,12 +34,6 @@ class HomeObjectStoreStorage extends ObjectStoreStorage implements \OCP\Files\IH
 		}
 		$this->user = $params['user'];
 		parent::__construct($params);
-
-
-		//initialize cache with root directory in cache
-		if ( ! $this->is_dir('files') ) {
-			$this->mkdir('files');
-		}
 	}
 
 	public function getId () {
diff --git a/lib/private/server.php b/lib/private/server.php
index 81c2283..790edfc 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -276,6 +276,8 @@ class Server extends SimpleContainer implements IServerContainer {
 				return null;
 			}
 			$userId = $user->getUID();
+		} else {
+			$user = $this->getUserManager()->get($userId);
 		}
 		$dir = '/' . $userId;
 		$root = $this->getRootFolder();
@@ -290,6 +292,19 @@ class Server extends SimpleContainer implements IServerContainer {
 		$dir = '/files';
 		if (!$folder->nodeExists($dir)) {
 			$folder = $folder->newFolder($dir);
+
+			if (\OCP\App::isEnabled('files_encryption')) {
+				// disable encryption proxy to prevent recursive calls
+				$proxyStatus = \OC_FileProxy::$enabled;
+				\OC_FileProxy::$enabled = false;
+			}
+
+			\OC_Util::copySkeleton($user, $folder);
+
+			if (\OCP\App::isEnabled('files_encryption')) {
+				// re-enable proxy - our work is done
+				\OC_FileProxy::$enabled = $proxyStatus;
+			}
 		} else {
 			$folder = $folder->get($dir);
 		}
diff --git a/lib/private/util.php b/lib/private/util.php
index 41311af..502cf8b 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -114,16 +114,6 @@ class OC_Util {
 				return $storage;
 			});
 
-			// copy skeleton for local storage only
-			if ( ! isset( $objectStore ) ) {
-				$userRoot = OC_User::getHome($user);
-				$userDirectory = $userRoot . '/files';
-				if( !is_dir( $userDirectory )) {
-					mkdir( $userDirectory, 0755, true );
-					OC_Util::copySkeleton($userDirectory);
-				}
-			}
-
 			$userDir = '/'.$user.'/files';
 
 			//jail the user into his "home" directory
@@ -132,7 +122,11 @@ class OC_Util {
 			$fileOperationProxy = new OC_FileProxy_FileOperations();
 			OC_FileProxy::register($fileOperationProxy);
 
+			//trigger creation of user home and /files folder
+			\OC::$server->getUserFolder($user);
+
 			OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $userDir));
+
 		}
 		return true;
 	}
@@ -204,31 +198,44 @@ class OC_Util {
 	}
 
 	/**
-	 * copies the user skeleton files into the fresh user home files
-	 * @param string $userDirectory
+	 * copies the skeleton to the users /files
+	 *
+	 * @param \OC\User\User $user
+	 * @param \OCP\Files\Folder $userDirectory
 	 */
-	public static function copySkeleton($userDirectory) {
-		$skeletonDirectory = OC_Config::getValue('skeletondirectory', \OC::$SERVERROOT.'/core/skeleton');
+	public static function copySkeleton(\OC\User\User $user, \OCP\Files\Folder $userDirectory) {
+
+		$skeletonDirectory = \OCP\Config::getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
+
 		if (!empty($skeletonDirectory)) {
-			OC_Util::copyr($skeletonDirectory , $userDirectory);
+			\OCP\Util::writeLog(
+				'files_skeleton',
+				'copying skeleton for '.$user->getUID().' from '.$skeletonDirectory.' to '.$userDirectory->getFullPath('/'),
+				\OCP\Util::DEBUG
+			);
+			self::copyr($skeletonDirectory, $userDirectory);
+			// update the file cache
+			$userDirectory->getStorage()->getScanner()->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE);
 		}
 	}
 
 	/**
-	 * copies a directory recursively
+	 * copies a directory recursively by using streams
+	 *
 	 * @param string $source
-	 * @param string $target
+	 * @param \OCP\Files\Folder $target
 	 * @return void
 	 */
-	public static function copyr($source,$target) {
+	public static function copyr($source, \OCP\Files\Folder $target) {
 		$dir = opendir($source);
-		@mkdir($target);
-		while(false !== ( $file = readdir($dir)) ) {
-			if ( !\OC\Files\Filesystem::isIgnoredDir($file) ) {
-				if ( is_dir($source . '/' . $file) ) {
-					OC_Util::copyr($source . '/' . $file , $target . '/' . $file);
+		while (false !== ($file = readdir($dir))) {
+			if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+				if (is_dir($source . '/' . $file)) {
+					$child = $target->newFolder($file);
+					self::copyr($source . '/' . $file, $child);
 				} else {
-					copy($source . '/' . $file,$target . '/' . $file);
+					$child = $target->newFile($file);
+					stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w'));
 				}
 			}
 		}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list