Merge pull request #7829 from owncloud/cachefolderlocation
Cache folder is now configurable
This commit is contained in:
commit
040f430f0c
|
@ -276,6 +276,15 @@ $CONFIG = array(
|
|||
/* all css and js files will be served by the web server statically in one js file and ons css file*/
|
||||
'asset-pipeline.enabled' => false,
|
||||
|
||||
/* where mount.json file should be stored, defaults to data/mount.json */
|
||||
'mount_file' => '',
|
||||
/* where mount.json file should be stored, defaults to data/mount.json */
|
||||
'mount_file' => '',
|
||||
|
||||
/*
|
||||
* Location of the cache folder, defaults to "data/$user/cache" where "$user" is the current user.
|
||||
*
|
||||
* When specified, the format will change to "$cache_path/$user" where "$cache_path" is the configured
|
||||
* cache directory and "$user" is the user.
|
||||
*
|
||||
*/
|
||||
'cache_path' => ''
|
||||
);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
|
||||
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
|
@ -10,22 +11,22 @@ namespace OC\Cache;
|
|||
|
||||
class File {
|
||||
protected $storage;
|
||||
|
||||
/**
|
||||
* Returns the cache storage for the logged in user
|
||||
* @return cache storage
|
||||
*/
|
||||
protected function getStorage() {
|
||||
if (isset($this->storage)) {
|
||||
return $this->storage;
|
||||
}
|
||||
if(\OC_User::isLoggedIn()) {
|
||||
\OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
|
||||
$subdir = 'cache';
|
||||
$view = new \OC\Files\View('/' . \OC_User::getUser());
|
||||
if(!$view->file_exists($subdir)) {
|
||||
$view->mkdir($subdir);
|
||||
}
|
||||
$this->storage = new \OC\Files\View('/' . \OC_User::getUser().'/'.$subdir);
|
||||
$this->storage = new \OC\Files\View('/' . \OC_User::getUser() . '/cache');
|
||||
return $this->storage;
|
||||
}else{
|
||||
\OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
|
||||
return false;
|
||||
throw new \OC\ForbiddenException('Can\t get cache storage, user not logged in');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -321,10 +321,35 @@ class Filesystem {
|
|||
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
|
||||
}
|
||||
|
||||
self::mountCacheDir($user);
|
||||
|
||||
// Chance to mount for other storages
|
||||
\OC_Hook::emit('OC_Filesystem', 'post_initMountPoints', array('user' => $user, 'user_dir' => $root));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mounts the cache directory
|
||||
* @param string $user user name
|
||||
*/
|
||||
private static function mountCacheDir($user) {
|
||||
$cacheBaseDir = \OC_Config::getValue('cache_path', '');
|
||||
if ($cacheBaseDir === '') {
|
||||
// use local cache dir relative to the user's home
|
||||
$subdir = 'cache';
|
||||
$view = new \OC\Files\View('/' . $user);
|
||||
if(!$view->file_exists($subdir)) {
|
||||
$view->mkdir($subdir);
|
||||
}
|
||||
} else {
|
||||
$cacheDir = rtrim($cacheBaseDir, '/') . '/' . $user;
|
||||
if (!file_exists($cacheDir)) {
|
||||
mkdir($cacheDir, 0770, true);
|
||||
}
|
||||
// mount external cache dir to "/$user/cache" mount point
|
||||
self::mount('\OC\Files\Storage\Local', array('datadir' => $cacheDir), '/' . $user . '/cache');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the default filesystem view
|
||||
*
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC;
|
||||
|
||||
/**
|
||||
* Exception thrown whenever access to a resource has
|
||||
* been forbidden or whenever a user isn't authenticated.
|
||||
*/
|
||||
class ForbiddenException extends \Exception {
|
||||
}
|
|
@ -226,4 +226,55 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
|
|||
$path = $arguments['path'];
|
||||
$this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the default cache dir is part of the user's home
|
||||
*/
|
||||
public function testMountDefaultCacheDir() {
|
||||
$userId = uniqid('user_');
|
||||
$oldCachePath = \OC_Config::getValue('cache_path', '');
|
||||
// no cache path configured
|
||||
\OC_Config::setValue('cache_path', '');
|
||||
|
||||
\OC_User::createUser($userId, $userId);
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
|
||||
$this->assertEquals(
|
||||
'/' . $userId . '/',
|
||||
\OC\Files\Filesystem::getMountPoint('/' . $userId . '/cache')
|
||||
);
|
||||
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache');
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Home', $storage);
|
||||
$this->assertEquals('cache', $internalPath);
|
||||
\OC_User::deleteUser($userId);
|
||||
|
||||
\OC_Config::setValue('cache_path', $oldCachePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that an external cache is mounted into
|
||||
* the user's home
|
||||
*/
|
||||
public function testMountExternalCacheDir() {
|
||||
$userId = uniqid('user_');
|
||||
|
||||
$oldCachePath = \OC_Config::getValue('cache_path', '');
|
||||
// set cache path to temp dir
|
||||
$cachePath = \OC_Helper::tmpFolder() . '/extcache';
|
||||
\OC_Config::setValue('cache_path', $cachePath);
|
||||
|
||||
\OC_User::createUser($userId, $userId);
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
|
||||
$this->assertEquals(
|
||||
'/' . $userId . '/cache/',
|
||||
\OC\Files\Filesystem::getMountPoint('/' . $userId . '/cache')
|
||||
);
|
||||
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache');
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Local', $storage);
|
||||
$this->assertEquals('', $internalPath);
|
||||
\OC_User::deleteUser($userId);
|
||||
|
||||
\OC_Config::setValue('cache_path', $oldCachePath);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue