From 60a03580fff65d969faea8e5788b278ed8b15481 Mon Sep 17 00:00:00 2001
From: Klaas Freitag <freitag@owncloud.com>
Date: Tue, 14 Feb 2012 09:59:54 +0100
Subject: [PATCH] allow to set a files mtime through a PROPPATCH request on
 resource 'lastmodified'. Needed for syncing algorithms.

---
 lib/connector/sabre/node.php | 12 ++++--------
 lib/filestorage/local.php    | 17 ++++++++++-------
 lib/filesystem.php           |  4 ++--
 lib/filesystemview.php       |  4 ++--
 4 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index b8b675c120..41acb48dfb 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -97,12 +97,8 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 	 *  in the second parameter or to now if the second param is empty.
 	 *  Even if the modification time is set to a custom value the access time is set to now.
 	 */
-	public function setLastModifiedTime($mtime) {
-		OC_Filesystem::setFileMtime($this->path, $mtime);
-	}
-
-	public function endsWith( $str, $sub ) {
-		return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
+	public function touch($mtime) {
+		OC_Filesystem::touch($this->path, $mtime);
 	}
 
 	/**
@@ -123,8 +119,8 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 				}
 			}
 			else {
-				if(  $this->endsWith( $propertyName, "modificationTime")) {
-					$this->setLastModifiedTime($propertyValue);
+				if( strcmp( $propertyName, "lastmodified")) {
+					$this->touch($propertyValue);
 				} else {
 					if(!array_key_exists( $propertyName, $existing )){
 						$query = OC_DB::prepare( 'INSERT INTO *PREFIX*properties (userid,propertypath,propertyname,propertyvalue) VALUES(?,?,?,?)' );
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 292d2a84e7..35db244e4d 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -65,13 +65,16 @@ class OC_Filestorage_Local extends OC_Filestorage{
 	public function filemtime($path){
 		return filemtime($this->datadir.$path);
 	}
-	
-	public function setFileMtime($path, $mtime){
-                   // sets the modification time of the file to the given value. If mtime is nil the current time is set.
-                  // note that the access time of the file always changes to the current time.
-                  return touch($this->datadir.$path, $mtime);
-         }
-
+	public function touch($path, $mtime){
+		// sets the modification time of the file to the given value. 
+		// If mtime is nil the current time is set.
+		// note that the access time of the file always changes to the current time.
+		if( touch( $this->datadir.$path, $mtime ) ) {
+			clearstatcache( true, $this->datadir.$path );
+		}
+		
+		return touch($this->datadir.$path, $mtime);
+	}
 	public function file_get_contents($path){
 		return file_get_contents($this->datadir.$path);
 	}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 75997c244f..90195bc213 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -345,8 +345,8 @@ class OC_Filesystem{
 	static public function filemtime($path){
 		return self::$defaultInstance->filemtime($path);
 	}
-	static public function setFileMtime($path, $mtime){
-		return self::$defaultInstance->setFileMtime($path, $mtime);
+	static public function touch($path, $mtime){
+		return self::$defaultInstance->touch($path, $mtime);
 	}
 	static public function file_get_contents($path){
 		return self::$defaultInstance->file_get_contents($path);
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index 0f1c546f4c..91c6cd1772 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -156,8 +156,8 @@ class OC_FilesystemView {
 	public function filemtime($path){
 		return $this->basicOperation('filemtime',$path);
 	}
-	public function setFileMtime($path, $mtime){
-		return $this->basicOperation('setFileMtime',$path, array('write'), $mtime);
+	public function touch($path, $mtime){
+		return $this->basicOperation('touch', $path, array('write'), $mtime);
 	}
 	public function file_get_contents($path){
 		return $this->basicOperation('file_get_contents',$path,array('read'));
-- 
GitLab