Merge pull request #619 from samtuke/versions_cache

OC_FSV->copy now only caches files which are copied from data/user/files
This commit is contained in:
Bart Visscher 2012-11-30 03:25:06 -08:00
commit 4db53f9d8e
2 changed files with 31 additions and 5 deletions

View File

@ -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) {

View File

@ -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;
}
}
}