From fc027bceb7309fd2f2b6e30cb781d700076669cd Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Fri, 27 Feb 2015 14:26:52 +0100
Subject: [PATCH] Fix cache update when doing a rename that overwrites the
 target

---
 lib/private/files/cache/updater.php |  5 ++++-
 tests/lib/files/view.php            | 13 +++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php
index 9f4cbfeff8c..eeb763921bb 100644
--- a/lib/private/files/cache/updater.php
+++ b/lib/private/files/cache/updater.php
@@ -45,7 +45,7 @@ class Updater {
 	 * @param int $time
 	 */
 	public function update($path, $time = null) {
-		if(Scanner::isPartialFile($path)) {
+		if (Scanner::isPartialFile($path)) {
 			return;
 		}
 		/**
@@ -116,6 +116,9 @@ class Updater {
 		if ($sourceStorage && $targetStorage) {
 			if ($sourceStorage === $targetStorage) {
 				$cache = $sourceStorage->getCache($sourceInternalPath);
+				if ($cache->inCache($targetInternalPath)) {
+					$cache->remove($targetInternalPath);
+				}
 				$cache->move($sourceInternalPath, $targetInternalPath);
 
 				if (pathinfo($sourceInternalPath, PATHINFO_EXTENSION) !== pathinfo($targetInternalPath, PATHINFO_EXTENSION)) {
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 0d88ec1d66a..db39df7d16b 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -962,4 +962,17 @@ class View extends \Test\TestCase {
 	public function testConstructDirectoryTraversalException($root) {
 		new \OC\Files\View($root);
 	}
+
+	public function testRenameOverWrite() {
+		$storage = new Temporary(array());
+		$scanner = $storage->getScanner();
+		$storage->mkdir('sub');
+		$storage->mkdir('foo');
+		$storage->file_put_contents('foo.txt', 'asd');
+		$storage->file_put_contents('foo/bar.txt', 'asd');
+		$scanner->scan('');
+		\OC\Files\Filesystem::mount($storage, array(), '/test/');
+		$view = new \OC\Files\View('');
+		$this->assertTrue($view->rename('/test/foo.txt', '/test/foo/bar.txt'));
+	}
 }
-- 
GitLab