From 960ff4f136dae689639d20a1a9f31a04e2961079 Mon Sep 17 00:00:00 2001 From: Robin Appelman <icewind@owncloud.com> Date: Fri, 23 Jan 2015 13:48:35 +0100 Subject: [PATCH] Apply wrappers to existing mounts before registering it --- lib/private/files/filesystem.php | 10 +++------- lib/private/files/storage/storagefactory.php | 9 ++++++++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php index 5fa3428643..c460159ece 100644 --- a/lib/private/files/filesystem.php +++ b/lib/private/files/filesystem.php @@ -175,15 +175,11 @@ class Filesystem { * @param callable $wrapper */ public static function addStorageWrapper($wrapperName, $wrapper) { - if (!self::getLoader()->addStorageWrapper($wrapperName, $wrapper)) { + $mounts = self::getMountManager()->getAll(); + if (!self::getLoader()->addStorageWrapper($wrapperName, $wrapper, $mounts)) { // do not re-wrap if storage with this name already existed return; } - - $mounts = self::getMountManager()->getAll(); - foreach ($mounts as $mount) { - $mount->wrapStorage($wrapper); - } } /** @@ -201,7 +197,7 @@ class Filesystem { /** * Returns the mount manager * - * @return \OC\Files\Filesystem\Mount\Manager + * @return \OC\Files\Mount\Manager */ public static function getMountManager() { if (!self::$mounts) { diff --git a/lib/private/files/storage/storagefactory.php b/lib/private/files/storage/storagefactory.php index 6fa360fa84..fa6dea2537 100644 --- a/lib/private/files/storage/storagefactory.php +++ b/lib/private/files/storage/storagefactory.php @@ -23,13 +23,20 @@ class StorageFactory implements IStorageFactory { * * @param string $wrapperName name of the wrapper * @param callable $callback callback + * @param \OCP\Files\Mount\IMountPoint[] $existingMounts existing mount points to apply the wrapper to * @return bool true if the wrapper was added, false if there was already a wrapper with this * name registered */ - public function addStorageWrapper($wrapperName, $callback) { + public function addStorageWrapper($wrapperName, $callback, $existingMounts = []) { if (isset($this->storageWrappers[$wrapperName])) { return false; } + + // apply to existing mounts before registering it to prevent applying it double in MountPoint::createStorage + foreach ($existingMounts as $mount) { + $mount->wrapStorage($callback); + } + $this->storageWrappers[$wrapperName] = $callback; return true; } -- GitLab