summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-10-31 16:42:54 +0100
committerBjoern Schiessle <schiessle@owncloud.com>2014-10-31 16:42:54 +0100
commitebe1d3df0a51f3517ea14ea4d3ba9c770f4f85c1 (patch)
tree0e5955293b2bd3dba807034c35a0d988abd58e4e /apps
parent206cb5ba632baa70a0317f5412c306708e4788d1 (diff)
downloadnextcloud-server-ebe1d3df0a51f3517ea14ea4d3ba9c770f4f85c1.tar.gz
nextcloud-server-ebe1d3df0a51f3517ea14ea4d3ba9c770f4f85c1.zip
don't move versions if only the mount point was renamed
Diffstat (limited to 'apps')
-rw-r--r--apps/files_versions/lib/hooks.php10
-rw-r--r--apps/files_versions/tests/versions.php43
2 files changed, 53 insertions, 0 deletions
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index 024cb6a3c39..53980463120 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -115,6 +115,16 @@ class Hooks {
public static function pre_renameOrCopy_hook($params) {
if (\OCP\App::isEnabled('files_versions')) {
+ // if we rename a movable mount point, then the versions don't have
+ // to be renamed
+ $absOldPath = \OC\Files\Filesystem::normalizePath('/' . \OCP\User::getUser() . '/files' . $params['oldpath']);
+ $manager = \OC\Files\Filesystem::getMountManager();
+ $mount = $manager->find($absOldPath);
+ $internalPath = $mount->getInternalPath($absOldPath);
+ if ($internalPath === '' and $mount instanceof \OC\Files\Mount\MoveableMount) {
+ return;
+ }
+
$view = new \OC\Files\View(\OCP\User::getUser() . '/files');
if ($view->file_exists($params['newpath'])) {
Storage::store($params['newpath']);
diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php
index 6dfba6bcf23..761cc07d9fc 100644
--- a/apps/files_versions/tests/versions.php
+++ b/apps/files_versions/tests/versions.php
@@ -288,6 +288,49 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
\OC\Files\Filesystem::unlink('/folder1/folder2/test.txt');
}
+ function testRenameSharedFile() {
+
+ \OC\Files\Filesystem::file_put_contents("test.txt", "test file");
+
+ $fileInfo = \OC\Files\Filesystem::getFileInfo('test.txt');
+
+ $t1 = time();
+ // second version is two weeks older, this way we make sure that no
+ // version will be expired
+ $t2 = $t1 - 60 * 60 * 24 * 14;
+
+ $this->rootView->mkdir(self::USERS_VERSIONS_ROOT);
+ // create some versions
+ $v1 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t1;
+ $v2 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t2;
+ // the renamed versions should not exist! Because we only moved the mount point!
+ $v1Renamed = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t1;
+ $v2Renamed = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t2;
+
+ $this->rootView->file_put_contents($v1, 'version1');
+ $this->rootView->file_put_contents($v2, 'version2');
+
+ \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_VERSIONS_USER2, OCP\PERMISSION_ALL);
+
+ self::loginHelper(self::TEST_VERSIONS_USER2);
+
+ $this->assertTrue(\OC\Files\Filesystem::file_exists('test.txt'));
+
+ // execute rename hook of versions app
+ \OC\Files\Filesystem::rename('test.txt', 'test2.txt');
+
+ self::loginHelper(self::TEST_VERSIONS_USER);
+
+ $this->assertTrue($this->rootView->file_exists($v1));
+ $this->assertTrue($this->rootView->file_exists($v2));
+
+ $this->assertFalse($this->rootView->file_exists($v1Renamed));
+ $this->assertFalse($this->rootView->file_exists($v2Renamed));
+
+ //cleanup
+ \OC\Files\Filesystem::unlink('/test.txt');
+ }
+
function testCopy() {
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");