diff options
author | Vincent Petry <vincent@nextcloud.com> | 2022-11-18 15:24:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-18 15:24:14 +0100 |
commit | 09e55c717bfb24aa24bc4f781789a222979c086c (patch) | |
tree | f321e579276932e8b1dac47a110ec601d6321eb6 /lib | |
parent | 473647a467d807703818f3d9f55352825a345bea (diff) | |
parent | 841a6a084ec5b52fe2fad6638dc548695da24881 (diff) | |
download | nextcloud-server-09e55c717bfb24aa24bc4f781789a222979c086c.tar.gz nextcloud-server-09e55c717bfb24aa24bc4f781789a222979c086c.zip |
Merge pull request #35218 from nextcloud/storage-setup-providers
delay updating setup providers untill we register the mounts
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/SetupManager.php | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php index d52a291cd99..ec5cd59d960 100644 --- a/lib/private/Files/SetupManager.php +++ b/lib/private/Files/SetupManager.php @@ -40,6 +40,7 @@ use OC_Util; use OCP\Constants; use OCP\Diagnostics\IEventLogger; use OCP\EventDispatcher\IEventDispatcher; +use OCP\Files\Config\ICachedMountInfo; use OCP\Files\Config\IHomeMountProvider; use OCP\Files\Config\IMountProvider; use OCP\Files\Config\IUserMountCache; @@ -414,9 +415,9 @@ class SetupManager { $mounts = []; if (!in_array($cachedMount->getMountProvider(), $setupProviders)) { - $setupProviders[] = $cachedMount->getMountProvider(); $currentProviders[] = $cachedMount->getMountProvider(); if ($cachedMount->getMountProvider()) { + $setupProviders[] = $cachedMount->getMountProvider(); $mounts = $this->mountProviderCollection->getUserMountsForProviderClasses($user, [$cachedMount->getMountProvider()]); } else { $this->logger->debug("mount at " . $cachedMount->getMountPoint() . " has no provider set, performing full setup"); @@ -427,16 +428,21 @@ class SetupManager { if ($includeChildren) { $subCachedMounts = $this->userMountCache->getMountsInPath($user, $path); - foreach ($subCachedMounts as $cachedMount) { - if (!in_array($cachedMount->getMountProvider(), $setupProviders)) { - $setupProviders[] = $cachedMount->getMountProvider(); - $currentProviders[] = $cachedMount->getMountProvider(); - if ($cachedMount->getMountProvider()) { + + $needsFullSetup = array_reduce($subCachedMounts, function (bool $needsFullSetup, ICachedMountInfo $cachedMountInfo) { + return $needsFullSetup || $cachedMountInfo->getMountProvider() === ''; + }, false); + + if ($needsFullSetup) { + $this->logger->debug("mount has no provider set, performing full setup"); + $this->setupForUser($user); + return; + } else { + foreach ($subCachedMounts as $cachedMount) { + if (!in_array($cachedMount->getMountProvider(), $setupProviders)) { + $currentProviders[] = $cachedMount->getMountProvider(); + $setupProviders[] = $cachedMount->getMountProvider(); $mounts = array_merge($mounts, $this->mountProviderCollection->getUserMountsForProviderClasses($user, [$cachedMount->getMountProvider()])); - } else { - $this->logger->debug("mount at " . $cachedMount->getMountPoint() . " has no provider set, performing full setup"); - $this->setupForUser($user); - return; } } } |