[Pkg-owncloud-commits] [owncloud] 207/273: rename mount point of children if parent was renamed

David Prévot taffit at moszumanska.debian.org
Fri Jul 4 03:13:18 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit ea31ab7b5c0f50075d15e69b6f2f1940fe2ac00f
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Wed Jul 2 15:35:15 2014 +0200

    rename mount point of children if parent was renamed
---
 apps/files_sharing/lib/updater.php   | 23 +++++++++++++++++++++++
 apps/files_sharing/tests/updater.php | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+)

diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
index e114c3b..aac4ed1 100644
--- a/apps/files_sharing/lib/updater.php
+++ b/apps/files_sharing/lib/updater.php
@@ -109,6 +109,7 @@ class Shared_Updater {
 	static public function renameHook($params) {
 		self::correctFolders($params['newpath']);
 		self::correctFolders(pathinfo($params['oldpath'], PATHINFO_DIRNAME));
+		self::renameChildren($params['oldpath'], $params['newpath']);
 	}
 
 	/**
@@ -209,4 +210,26 @@ class Shared_Updater {
 		$findAndRemoveShares->execute(array());
 	}
 
+	/**
+	 * rename mount point from the children if the parent was renamed
+	 * 
+	 * @param string $oldPath old path relative to data/user/files
+	 * @param string $newPath new path relative to data/user/files
+	 */
+	static private function renameChildren($oldPath, $newPath) {
+
+		$absNewPath =  \OC\Files\Filesystem::normalizePath('/' . \OCP\User::getUser() . '/files/' . $newPath);
+		$absOldPath =  \OC\Files\Filesystem::normalizePath('/' . \OCP\User::getUser() . '/files/' . $oldPath);
+
+		$mountManager = \OC\Files\Filesystem::getMountManager();
+		$mountedShares = $mountManager->findIn('/' . \OCP\User::getUser() . '/files/' . $oldPath);
+		foreach ($mountedShares as $mount) {
+			if ($mount->getStorage()->instanceOfStorage('OCA\Files_Sharing\ISharedStorage')) {
+				$mountPoint = $mount->getMountPoint();
+				$target = str_replace($absOldPath, $absNewPath, $mountPoint);
+				$mount->moveMount($target);
+			}
+		}
+	}
+
 }
diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php
index cdb4406..5ec5348 100644
--- a/apps/files_sharing/tests/updater.php
+++ b/apps/files_sharing/tests/updater.php
@@ -217,4 +217,40 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
 
 	}
 
+	/**
+	 * if a folder gets renamed all children mount points should be renamed too
+	 */
+	function testRename() {
+
+		$fileinfo = \OC\Files\Filesystem::getFileInfo($this->folder);
+		$result = \OCP\Share::shareItem('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
+		$this->assertTrue($result);
+
+		$this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+		// make sure that the shared folder exists
+		$this->assertTrue(\OC\Files\Filesystem::file_exists($this->folder));
+
+		\OC\Files\Filesystem::mkdir('oldTarget');
+		\OC\Files\Filesystem::mkdir('oldTarget/subfolder');
+		\OC\Files\Filesystem::mkdir('newTarget');
+
+		\OC\Files\Filesystem::rename($this->folder, 'oldTarget/subfolder/' . $this->folder);
+
+		// re-login to make sure that the new mount points are initialized
+		$this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+		\OC\Files\Filesystem::rename('/oldTarget', '/newTarget/oldTarget');
+
+		// re-login to make sure that the new mount points are initialized
+		$this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+		$this->assertTrue(\OC\Files\Filesystem::file_exists('/newTarget/oldTarget/subfolder/' . $this->folder));
+
+		// cleanup
+		$this->loginHelper(self::TEST_FILES_SHARING_API_USER1);
+		$result = \OCP\Share::unshare('folder', $fileinfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
+		$this->assertTrue($result);
+	}
+
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list