summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2022-11-18 15:24:14 +0100
committerGitHub <noreply@github.com>2022-11-18 15:24:14 +0100
commit09e55c717bfb24aa24bc4f781789a222979c086c (patch)
treef321e579276932e8b1dac47a110ec601d6321eb6 /lib
parent473647a467d807703818f3d9f55352825a345bea (diff)
parent841a6a084ec5b52fe2fad6638dc548695da24881 (diff)
downloadnextcloud-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.php26
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;
}
}
}