Merge pull request #7420 from owncloud/cachehooks-first
Manually triger the filecache update hooks before any other hook
This commit is contained in:
commit
1ae10b9da3
|
@ -12,13 +12,6 @@ OCP\App::addNavigationEntry(array("id" => "files_index",
|
|||
|
||||
OC_Search::registerProvider('OC_Search_Provider_File');
|
||||
|
||||
// cache hooks must be connected before all other apps.
|
||||
// since 'files' is always loaded first the hooks need to be connected here
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_touch', '\OC\Files\Cache\Updater', 'touchHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
|
||||
|
||||
\OCP\BackgroundJob::addRegularTask('\OC\Files\Cache\BackgroundWatcher', 'checkNext');
|
||||
|
||||
$templateManager = OC_Helper::getFileTemplateManager();
|
||||
|
|
|
@ -119,6 +119,9 @@ class Updater {
|
|||
|
||||
if ($uid != \OCP\User::getUser()) {
|
||||
$info = \OC\Files\Filesystem::getFileInfo($filename);
|
||||
if (!$info) {
|
||||
return array($uid, '/files/' . $filename);
|
||||
}
|
||||
$ownerView = new \OC\Files\View('/' . $uid . '/files');
|
||||
$filename = $ownerView->getPath($info['fileid']);
|
||||
}
|
||||
|
@ -150,7 +153,7 @@ class Updater {
|
|||
$cache->update($id, array('mtime' => $time, 'etag' => $storage->getETag($internalPath)));
|
||||
if ($realPath !== '') {
|
||||
$realPath = dirname($realPath);
|
||||
if($realPath === DIRECTORY_SEPARATOR ) {
|
||||
if ($realPath === DIRECTORY_SEPARATOR) {
|
||||
$realPath = "";
|
||||
}
|
||||
// check storage for parent in case we change the storage in this step
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
namespace OC\Files;
|
||||
|
||||
use OC\Files\Cache\Updater;
|
||||
|
||||
class View {
|
||||
private $fakeRoot = '';
|
||||
private $internal_path_cache = array();
|
||||
|
@ -308,6 +310,9 @@ class View {
|
|||
fclose($target);
|
||||
fclose($data);
|
||||
if ($this->shouldEmitHooks($path) && $result !== false) {
|
||||
Updater::writeHook(array(
|
||||
'path' => $this->getHookPath($path)
|
||||
));
|
||||
if (!$exists) {
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
|
@ -433,6 +438,7 @@ class View {
|
|||
}
|
||||
if ($this->shouldEmitHooks() && (Cache\Scanner::isPartialFile($path1) && !Cache\Scanner::isPartialFile($path2)) && $result !== false) {
|
||||
// if it was a rename from a part file to a regular file it was a write and not a rename operation
|
||||
Updater::writeHook(array('path' => $this->getHookPath($path2)));
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
Filesystem::signal_post_write,
|
||||
|
@ -441,6 +447,10 @@ class View {
|
|||
)
|
||||
);
|
||||
} elseif ($this->shouldEmitHooks() && $result !== false) {
|
||||
Updater::renameHook(array(
|
||||
'oldpath' => $this->getHookPath($path1),
|
||||
'newpath' => $this->getHookPath($path2)
|
||||
));
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
Filesystem::signal_post_rename,
|
||||
|
@ -741,7 +751,10 @@ class View {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param string[] $hooks
|
||||
* @param string $path
|
||||
* @param bool $post
|
||||
* @return bool
|
||||
*/
|
||||
private function runHooks($hooks, $path, $post = false) {
|
||||
$path = $this->getHookPath($path);
|
||||
|
@ -749,6 +762,16 @@ class View {
|
|||
$run = true;
|
||||
if ($this->shouldEmitHooks($path)) {
|
||||
foreach ($hooks as $hook) {
|
||||
// manually triger updater hooks to ensure they are called first
|
||||
if ($post) {
|
||||
if ($hook == 'write') {
|
||||
Updater::writeHook(array('path' => $path));
|
||||
} elseif ($hook == 'touch') {
|
||||
Updater::touchHook(array('path' => $path));
|
||||
} else if ($hook == 'delete') {
|
||||
Updater::deleteHook(array('path' => $path));
|
||||
}
|
||||
}
|
||||
if ($hook != 'read') {
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
|
@ -820,7 +843,7 @@ class View {
|
|||
$data = $cache->get($internalPath);
|
||||
}
|
||||
|
||||
if ($data and $data['fileid']) {
|
||||
if ($data and isset($data['fileid'])) {
|
||||
if ($includeMountPoints and $data['mimetype'] === 'httpd/unix-directory') {
|
||||
//add the sizes of other mountpoints to the folder
|
||||
$mountPoints = Filesystem::getMountPoints($path);
|
||||
|
|
|
@ -65,11 +65,6 @@ class Updater extends \PHPUnit_Framework_TestCase {
|
|||
Filesystem::mount($this->storage, array(), '/' . self::$user . '/files');
|
||||
|
||||
\OC_Hook::clear('OC_Filesystem');
|
||||
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
|
||||
\OC_Hook::connect('OC_Filesystem', 'post_touch', '\OC\Files\Cache\Updater', 'touchHook');
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
|
|
Loading…
Reference in New Issue