* 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
* @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) {
$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,
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;
+
}
}
}