]> source.dussan.org Git - nextcloud-server.git/commitdiff
don't move versions if only the mount point was renamed
authorBjoern Schiessle <schiessle@owncloud.com>
Fri, 31 Oct 2014 15:42:54 +0000 (16:42 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Fri, 31 Oct 2014 15:42:54 +0000 (16:42 +0100)
apps/files_versions/lib/hooks.php
apps/files_versions/tests/versions.php

index 024cb6a3c39bb8020d6c520643d112f83c187b67..53980463120ba2e731dbaf7b46d372d88a9d8a2d 100644 (file)
@@ -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']);
index 6dfba6bcf233191f78523fc959d44ace0684276d..761cc07d9fc6190bfb40d3310217138e29464f5e 100644 (file)
@@ -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");