[Pkg-owncloud-commits] [owncloud] 98/122: move/copy from storage

David Prévot taffit at moszumanska.debian.org
Sat May 9 00:00:23 UTC 2015


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

taffit pushed a commit to branch stable8
in repository owncloud.

commit dc39bda8704d54d7481b9b42d2cea44146d18a3d
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Wed Apr 15 09:49:50 2015 +0200

    move/copy from storage
---
 lib/private/files/storage/wrapper/encryption.php | 74 +++++++++++++++++++++---
 tests/lib/files/storage/wrapper/encryption.php   | 19 +++---
 2 files changed, 77 insertions(+), 16 deletions(-)

diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php
index 24bbef9..c37d3b4 100644
--- a/lib/private/files/storage/wrapper/encryption.php
+++ b/lib/private/files/storage/wrapper/encryption.php
@@ -61,19 +61,20 @@ class Encryption extends Wrapper {
 	/** @var IMountPoint */
 	private $mount;
 
-	/** @var \OCP\Encryption\Keys\IStorage */
+
+	/** @var IStorage */
 	private $keyStorage;
 
-	/** @var \OC\Encryption\Update */
+	/** @var Update */
 	private $update;
 
 	/**
 	 * @param array $parameters
-	 * @param \OCP\Encryption\IManager $encryptionManager
-	 * @param \OC\Encryption\Util $util
-	 * @param \OCP\ILogger $logger
-	 * @param \OCP\Encryption\IFile $fileHelper
-	 * @param string $uid user who perform the read/write operation (null for public access)
+	 * @param IManager $encryptionManager
+	 * @param Util $util
+	 * @param ILogger $logger
+	 * @param IFile $fileHelper
+	 * @param string $uid
 	 * @param IStorage $keyStorage
 	 * @param Update $update
 	 */
@@ -366,6 +367,65 @@ class Encryption extends Wrapper {
 	}
 
 	/**
+	 * @param \OCP\Files\Storage $sourceStorage
+	 * @param string $sourceInternalPath
+	 * @param string $targetInternalPath
+	 * @param bool $preserveMtime
+	 * @return bool
+	 */
+	public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) {
+		$result = $this->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath, true);
+		if ($result) {
+			if ($sourceStorage->is_dir($sourceInternalPath)) {
+				$result &= $sourceStorage->rmdir($sourceInternalPath);
+			} else {
+				$result &= $sourceStorage->unlink($sourceInternalPath);
+			}
+		}
+		return $result;
+	}
+
+
+	/**
+	 * @param \OCP\Files\Storage $sourceStorage
+	 * @param string $sourceInternalPath
+	 * @param string $targetInternalPath
+	 * @param bool $preserveMtime
+	 * @return bool
+	 */
+	public function copyFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) {
+		if ($sourceStorage->is_dir($sourceInternalPath)) {
+			$dh = $sourceStorage->opendir($sourceInternalPath);
+			$result = $this->mkdir($targetInternalPath);
+			if (is_resource($dh)) {
+				while ($result and ($file = readdir($dh)) !== false) {
+					if (!Filesystem::isIgnoredDir($file)) {
+						$result &= $this->copyFromStorage($sourceStorage, $sourceInternalPath . '/' . $file, $targetInternalPath . '/' . $file);
+					}
+				}
+			}
+		} else {
+			$source = $sourceStorage->fopen($sourceInternalPath, 'r');
+			$target = $this->fopen($targetInternalPath, 'w');
+			list(, $result) = \OC_Helper::streamCopy($source, $target);
+			if ($result and $preserveMtime) {
+				$this->touch($targetInternalPath, $sourceStorage->filemtime($sourceInternalPath));
+			}
+			fclose($source);
+			fclose($target);
+
+			if (!$result) {
+				// delete partially written target file
+				$this->unlink($targetInternalPath);
+				// delete cache entry that was created by fopen
+				$this->getCache()->remove($targetInternalPath);
+			}
+		}
+		return (bool)$result;
+
+	}
+
+	/**
 	 * get the path to a local version of the file.
 	 * The local version of the file can be temporary and doesn't have to be persistent across requests
 	 *
diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php
index 6c593bb..bc803f5 100644
--- a/tests/lib/files/storage/wrapper/encryption.php
+++ b/tests/lib/files/storage/wrapper/encryption.php
@@ -106,15 +106,17 @@ class Encryption extends \Test\Files\Storage\Storage {
 			->willReturn(['encrypted' => false]);
 
 		$this->instance = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Encryption')
-			->setConstructorArgs([
+			->setConstructorArgs(
 				[
-					'storage' => $this->sourceStorage,
-					'root' => 'foo',
-					'mountPoint' => '/',
-					'mount' => $mount
-				],
-				$this->encryptionManager, $this->util, $logger, $file, null, $this->keyStore, $this->update
-			])
+					[
+						'storage' => $this->sourceStorage,
+						'root' => 'foo',
+						'mountPoint' => '/',
+						'mount' => $mount
+					],
+					$this->encryptionManager, $this->util, $logger, $file, null, $this->keyStore, $this->update
+				]
+			)
 			->setMethods(['getMetaData', 'getCache'])
 			->getMock();
 
@@ -125,7 +127,6 @@ class Encryption extends \Test\Files\Storage\Storage {
 		$this->instance->expects($this->any())
 			->method('getCache')
 			->willReturn($this->cache);
-
 	}
 
 	/**

-- 
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