From 48bb53030c657e1133da47765c7c778a069af665 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= <schiessle@owncloud.com>
Date: Thu, 7 Mar 2013 15:51:44 +0100
Subject: [PATCH] distinguish between touch and write

---
 apps/files_versions/lib/hooks.php    |  6 ++++++
 apps/files_versions/lib/versions.php |  1 +
 lib/files/view.php                   | 10 +++++++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index 7891b20e92f..6e81286052f 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -21,6 +21,12 @@ class Hooks {
 
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
 			$path = $params[\OC\Files\Filesystem::signal_param_path];
+			$pos = strrpos($path, '.part');
+			if ($pos) {
+				error_log("old path: $path");
+				$path = substr($path, 0, $pos);
+				error_log("new path: $path");
+			}
 			if($path<>'') {
 				Storage::store($path);
 			}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index c37133cf32c..274f38095db 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -107,6 +107,7 @@ class Storage {
 
 			// store a new version of a file
 			$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
+			error_log("version created!");
 			$versionsSize = self::getVersionsSize($uid);
 			if (  $versionsSize === false || $versionsSize < 0 ) {
 				$versionsSize = self::calculateSize($uid);
diff --git a/lib/files/view.php b/lib/files/view.php
index 3e2cb080e1d..59339ff2071 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -245,7 +245,14 @@ class View {
 		if (!is_null($mtime) and !is_numeric($mtime)) {
 			$mtime = strtotime($mtime);
 		}
-		return $this->basicOperation('touch', $path, array('write'), $mtime);
+		
+		$hooks = array('touch');
+		
+		if (!$this->file_exists($path)) {
+			$hooks[] = 'write';
+		}
+		
+		return $this->basicOperation('touch', $path, $hooks, $mtime);
 	}
 
 	public function file_get_contents($path) {
@@ -596,6 +603,7 @@ class View {
 			if ($path == null) {
 				return false;
 			}
+			foreach ($hooks as $h) if ($h == "write") error_log("write triggered by $operation for $path");
 			$run = $this->runHooks($hooks, $path);
 			list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
 			if ($run and $storage) {
-- 
GitLab