[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