diff options
author | Robin Appelman <icewind@owncloud.com> | 2013-07-01 17:45:01 +0200 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2014-05-28 18:16:23 +0200 |
commit | 38c1da09768d034ee788f0c6a4284591e914fe4a (patch) | |
tree | 5312ae50b7f9299c6a9c54b0aaac774d52a892a2 | |
parent | e83b41493fe28eca612f3993a5a1cc3e44e9c145 (diff) | |
download | nextcloud-server-38c1da09768d034ee788f0c6a4284591e914fe4a.tar.gz nextcloud-server-38c1da09768d034ee788f0c6a4284591e914fe4a.zip |
fix recursive rename for local storage backend
-rw-r--r-- | lib/private/files/storage/local.php | 6 | ||||
-rw-r--r-- | tests/lib/files/storage/storage.php | 16 |
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php index aaa9f3c858e..ec28ebac6ee 100644 --- a/lib/private/files/storage/local.php +++ b/lib/private/files/storage/local.php @@ -177,9 +177,11 @@ if (\OC_Util::runningOnWindows()) { return false; } - if ($return = rename($this->datadir . $path1, $this->datadir . $path2)) { + if ($this->is_dir($path2)) { + $this->rmdir($path2); } - return $return; + + return rename($this->datadir . $path1, $this->datadir . $path2); } public function copy($path1, $path2) { diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index 92afd47673a..4a4626fc5c5 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -385,4 +385,20 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertEquals('qwerty', $this->instance->file_get_contents('target/test2.txt')); $this->assertEquals('bar', $this->instance->file_get_contents('target/subfolder/test.txt')); } + + public function testRenameOverWriteDirectory() { + $this->instance->mkdir('source'); + $this->instance->file_put_contents('source/test1.txt', 'foo'); + + $this->instance->mkdir('target'); + $this->instance->file_put_contents('target/test1.txt', 'bar'); + $this->instance->file_put_contents('target/test2.txt', 'bar'); + + $this->instance->rename('source', 'target'); + + $this->assertFalse($this->instance->file_exists('source')); + $this->assertFalse($this->instance->file_exists('source/test1.txt')); + $this->assertFalse($this->instance->file_exists('target/test2.txt')); + $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt')); + } } |