summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/files/cache/updater.php5
-rw-r--r--tests/lib/files/view.php13
2 files changed, 17 insertions, 1 deletions
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'));
+ }
}