From 6975c5537bd3562bb6c6f33810fd05d609882c28 Mon Sep 17 00:00:00 2001
From: Sam Tuke <samtuke@owncloud.com>
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;
+			
 			}
 		}
 	}
-- 
GitLab