[Pkg-owncloud-commits] [owncloud] 20/70: if a folder gets deleted we unshare all shared files/folders below

David Prévot taffit at moszumanska.debian.org
Mon Jul 14 17:38:04 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 2bd3aa6b21ddab1bfda73bef6f5dfaf348047157
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Wed Jul 2 14:40:22 2014 +0200

    if a folder gets deleted we unshare all shared files/folders below
---
 apps/files_sharing/lib/proxy.php       | 24 ++++++++++--------------
 apps/files_sharing/lib/sharedmount.php |  2 ++
 apps/files_sharing/tests/proxy.php     | 27 ++++++++++++++-------------
 apps/files_sharing/tests/updater.php   | 14 +++++++-------
 4 files changed, 33 insertions(+), 34 deletions(-)

diff --git a/apps/files_sharing/lib/proxy.php b/apps/files_sharing/lib/proxy.php
index f595328..92303d2 100644
--- a/apps/files_sharing/lib/proxy.php
+++ b/apps/files_sharing/lib/proxy.php
@@ -21,47 +21,43 @@
  */
 
 namespace OCA\Files\Share;
+use OCA\Files_Sharing\Helper;
 
 class Proxy extends \OC_FileProxy {
 
 	/**
-	 * check if the deleted folder contains share mount points and move them
-	 * up to the parent
+	 * check if the deleted folder contains share mount points and unshare them
 	 *
 	 * @param string $path
 	 */
 	public function preUnlink($path) {
-		$this->moveMountPointsUp($path);
+		$this->unshareChildren($path);
 	}
 
 	/**
-	 * check if the deleted folder contains share mount points and move them
-	 * up to the parent
+	 * check if the deleted folder contains share mount points and unshare them
 	 *
 	 * @param string $path
 	 */
 	public function preRmdir($path) {
-		$this->moveMountPointsUp($path);
+		$this->unshareChildren($path);
 	}
 
 	/**
-	 * move share mount points up to the parent
+	 * unshare shared items below the deleted folder
 	 *
 	 * @param string $path
 	 */
-	private function moveMountPointsUp($path) {
+	private function unshareChildren($path) {
 		$view = new \OC\Files\View('/');
 
-		// find share mount points within $path and move them up to the parent folder
-		// before we delete $path
+		// find share mount points within $path and unmount them
 		$mountManager = \OC\Files\Filesystem::getMountManager();
 		$mountedShares = $mountManager->findIn($path);
 		foreach ($mountedShares as $mount) {
-			if ($mount->getStorage()->instanceOfStorage('\OC\Files\Storage\Shared')) {
+			if ($mount->getStorage()->instanceOfStorage('OCA\Files_Sharing\ISharedStorage')) {
 				$mountPoint = $mount->getMountPoint();
-				$mountPointName = $mount->getMountPointName();
-				$target = \OCA\Files_Sharing\Helper::generateUniqueTarget(dirname($path) . '/' . $mountPointName, array(), $view);
-				$view->rename($mountPoint, $target);
+				$view->unlink($mountPoint);
 			}
 		}
 	}
diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php
index f8def2c..564ac43 100644
--- a/apps/files_sharing/lib/sharedmount.php
+++ b/apps/files_sharing/lib/sharedmount.php
@@ -143,8 +143,10 @@ class SharedMount extends Mount implements MoveableMount {
 	 * @return bool
 	 */
 	public function removeMount() {
+		$mountManager = \OC\Files\Filesystem::getMountManager();
 		$storage = $this->getStorage();
 		$result =  \OCP\Share::unshareFromSelf($storage->getItemType(), $storage->getMountPoint());
+		$mountManager->removeMount($this->mountPoint);
 
 		return $result;
 	}
diff --git a/apps/files_sharing/tests/proxy.php b/apps/files_sharing/tests/proxy.php
index 634ed86..b6599a1 100644
--- a/apps/files_sharing/tests/proxy.php
+++ b/apps/files_sharing/tests/proxy.php
@@ -47,7 +47,6 @@ class Test_Files_Sharing_Proxy extends Test_Files_Sharing_Base {
 		$this->filename = '/share-api-test';
 
 		// save file with content
-		$this->view->file_put_contents($this->filename, $this->data);
 		$this->view->mkdir($this->folder);
 		$this->view->mkdir($this->folder . $this->subfolder);
 		$this->view->mkdir($this->folder . $this->subfolder . $this->subsubfolder);
@@ -56,7 +55,6 @@ class Test_Files_Sharing_Proxy extends Test_Files_Sharing_Base {
 	}
 
 	function tearDown() {
-		$this->view->unlink($this->filename);
 		$this->view->deleteAll($this->folder);
 
 		self::$tempStorage = null;
@@ -69,30 +67,33 @@ class Test_Files_Sharing_Proxy extends Test_Files_Sharing_Base {
 	 */
 	function testpreUnlink() {
 
-		$fileInfo1 = \OC\Files\Filesystem::getFileInfo($this->filename);
 		$fileInfo2 = \OC\Files\Filesystem::getFileInfo($this->folder);
 
-		$result = \OCP\Share::shareItem('file', $fileInfo1->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
-		$this->assertTrue($result);
-
 		$result = \OCP\Share::shareItem('folder', $fileInfo2->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
 		$this->assertTrue($result);
 
 		self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
 
-		// move shared folder to 'localDir' and rename it, so that it uses the same
-		// name as the shared file
+		// one folder should be shared with the user
+		$sharedFolders = \OCP\Share::getItemsSharedWith('folder');
+		$this->assertSame(1, count($sharedFolders));
+
+		// move shared folder to 'localDir'
 		\OC\Files\Filesystem::mkdir('localDir');
-		$result = \OC\Files\Filesystem::rename($this->folder, '/localDir/' . $this->filename);
+		$result = \OC\Files\Filesystem::rename($this->folder, '/localDir/' . $this->folder);
 		$this->assertTrue($result);
 
 		\OC\Files\Filesystem::unlink('localDir');
 
 		self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
 
-		// after we deleted 'localDir' the share should be moved up to the root and be
-		// renamed to "filename (2)"
-		$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename));
-		$this->assertTrue(\OC\Files\Filesystem::file_exists($this->filename . ' (2)' ));
+		// after the parent directory was deleted the share should be unshared
+		$sharedFolders = \OCP\Share::getItemsSharedWith('folder');
+		$this->assertTrue(empty($sharedFolders));
+
+		self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+		// the folder for the owner should still exists
+		$this->assertTrue(\OC\Files\Filesystem::file_exists($this->folder));
 	}
 }
diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php
index 5ec5348..1f51b9a 100644
--- a/apps/files_sharing/tests/updater.php
+++ b/apps/files_sharing/tests/updater.php
@@ -57,7 +57,7 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
 
 	/**
 	 * test deletion of a folder which contains share mount points. Share mount
-	 * points should move up to the parent before the folder gets deleted so
+	 * points should be unshared before the folder gets deleted so
 	 * that the mount point doesn't end up at the trash bin
 	 */
 	function testDeleteParentFolder() {
@@ -78,6 +78,9 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
 		// check if user2 can see the shared folder
 		$this->assertTrue($view->file_exists($this->folder));
 
+		$foldersShared = \OCP\Share::getItemsSharedWith('folder');
+		$this->assertSame(1, count($foldersShared));
+
 		$view->mkdir("localFolder");
 		$view->file_put_contents("localFolder/localFile.txt", "local file");
 
@@ -91,8 +94,9 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
 
 		$this->loginHelper(self::TEST_FILES_SHARING_API_USER2);
 
-		// mount point should move up again
-		$this->assertTrue($view->file_exists($this->folder));
+		// shared folder should be unshared
+		$foldersShared = \OCP\Share::getItemsSharedWith('folder');
+		$this->assertTrue(empty($foldersShared));
 
 		// trashbin should contain the local file but not the mount point
 		$rootView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2);
@@ -109,10 +113,6 @@ class Test_Files_Sharing_Updater extends Test_Files_Sharing_Base {
 		if ($status === false) {
 			\OC_App::disable('files_trashbin');
 		}
-		// 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