From 6975c5537bd3562bb6c6f33810fd05d609882c28 Mon Sep 17 00:00:00 2001 From: Sam Tuke Date: Wed, 28 Nov 2012 16:57:44 +0000 Subject: [PATCH] OC_FSV->copy now only caches files which are copied from data/user/files Added contextual comments --- lib/filecache.php | 5 +++-- lib/filesystemview.php | 31 ++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/filecache.php b/lib/filecache.php index 2479d29e32..7bf98f43a3 100644 --- a/lib/filecache.php +++ b/lib/filecache.php @@ -28,6 +28,7 @@ * It will try to keep the data up to date but changes from outside ownCloud can invalidate the cache */ class OC_FileCache{ + /** * get the filesystem info from the cache * @param string path @@ -58,8 +59,8 @@ class OC_FileCache{ * @param string $path * @param array data * @param string root (optional) - * - * $data is an assiciative array in the same format as returned by get + * @note $data is an associative array in the same format as returned + * by get */ public static function put($path, $data, $root=false) { if($root===false) { diff --git a/lib/filesystemview.php b/lib/filesystemview.php index 0229213ebc..3bd3f8737e 100644 --- a/lib/filesystemview.php +++ b/lib/filesystemview.php @@ -430,7 +430,10 @@ class OC_FilesystemView { $target = $this->fopen($path2.$postFix2, 'w'); $result = OC_Helper::streamCopy($source, $target); } - if( $this->fakeRoot==OC_Filesystem::getRoot() ) { + if( $this->fakeRoot==OC_Filesystem::getRoot() ) { + // If the file to be copied originates within + // the user's data directory + OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_copy, @@ -451,11 +454,33 @@ class OC_FilesystemView { OC_Filesystem::signal_post_write, array( OC_Filesystem::signal_param_path => $path2) ); - } else { // no real copy, file comes from somewhere else, e.g. version rollback -> just update the file cache and the webdav properties without all the other post_write actions - OC_FileCache_Update::update($path2, $this->fakeRoot); + + } else { + // If this is not a normal file copy operation + // and the file originates somewhere else + // (e.g. a version rollback operation), do not + // perform all the other post_write actions + + // Update webdav properties OC_Filesystem::removeETagHook(array("path" => $path2), $this->fakeRoot); + + $splitPath2 = explode( '/', $path2 ); + + // Only cache information about files + // that are being copied from within + // the user files directory. Caching + // other files, like VCS backup files, + // serves no purpose + if ( $splitPath2[1] == 'files' ) { + + OC_FileCache_Update::update($path2, $this->fakeRoot); + + } + } + return $result; + } } }