summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSam Tuke <samtuke@owncloud.com>2012-11-28 16:57:44 +0000
committerSam Tuke <samtuke@owncloud.com>2012-11-28 16:57:44 +0000
commit6975c5537bd3562bb6c6f33810fd05d609882c28 (patch)
tree7d54192fd659d9ef11e9965b422eaa42e24c86d3 /lib
parenteaa625c9bc426dcba0427457777a79a3944628a5 (diff)
downloadnextcloud-server-6975c5537bd3562bb6c6f33810fd05d609882c28.tar.gz
nextcloud-server-6975c5537bd3562bb6c6f33810fd05d609882c28.zip
OC_FSV->copy now only caches files which are copied from data/user/files
Added contextual comments
Diffstat (limited to 'lib')
-rw-r--r--lib/filecache.php5
-rw-r--r--lib/filesystemview.php31
2 files changed, 31 insertions, 5 deletions
diff --git a/lib/filecache.php b/lib/filecache.php
index 2479d29e329..7bf98f43a37 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 0229213ebcb..3bd3f8737e7 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;
+
}
}
}