aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2022-04-22 17:03:09 +0200
committerGitHub <noreply@github.com>2022-04-22 17:03:09 +0200
commitfb59875071ca260f97aaef4d8842a3f4140429de (patch)
tree87809269bc3a2bdfc2f2e488b36d71b103e3ee05 /lib
parenta40db94dff6832b96be8d157fcfbf5c9d3c3ba95 (diff)
parent561a2071e4115e1a96afac343fef339a03a01c9a (diff)
downloadnextcloud-server-fb59875071ca260f97aaef4d8842a3f4140429de.tar.gz
nextcloud-server-fb59875071ca260f97aaef4d8842a3f4140429de.zip
Merge pull request #32040 from nextcloud/full-setup-only-new
only register mounts that are new from providers that are new during a full setup
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/Config/MountProviderCollection.php4
-rw-r--r--lib/private/Files/SetupManager.php15
2 files changed, 16 insertions, 3 deletions
diff --git a/lib/private/Files/Config/MountProviderCollection.php b/lib/private/Files/Config/MountProviderCollection.php
index 334fce15d9e..0e08d9d0e83 100644
--- a/lib/private/Files/Config/MountProviderCollection.php
+++ b/lib/private/Files/Config/MountProviderCollection.php
@@ -234,4 +234,8 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
$this->homeProviders = [];
$this->rootProviders = [];
}
+
+ public function getProviders(): array {
+ return $this->providers;
+ }
}
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index f1799798ccb..98792ed8043 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -203,6 +203,8 @@ class SetupManager {
$this->setupUserMountProviders[$user->getUID()] = [];
}
+ $previouslySetupProviders = $this->setupUserMountProviders[$user->getUID()];
+
$this->setupForUserWith($user, function () use ($user) {
$this->mountProviderCollection->addMountForUser($user, $this->mountManager, function (
IMountProvider $provider
@@ -210,7 +212,7 @@ class SetupManager {
return !in_array(get_class($provider), $this->setupUserMountProviders[$user->getUID()]);
});
});
- $this->afterUserFullySetup($user);
+ $this->afterUserFullySetup($user, $previouslySetupProviders);
}
/**
@@ -258,13 +260,20 @@ class SetupManager {
/**
* Final housekeeping after a user has been fully setup
*/
- private function afterUserFullySetup(IUser $user): void {
+ private function afterUserFullySetup(IUser $user, array $previouslySetupProviders): void {
$userRoot = '/' . $user->getUID() . '/';
$mounts = $this->mountManager->getAll();
$mounts = array_filter($mounts, function (IMountPoint $mount) use ($userRoot) {
return strpos($mount->getMountPoint(), $userRoot) === 0;
});
- $this->userMountCache->registerMounts($user, $mounts);
+ $allProviders = array_map(function (IMountProvider $provider) {
+ return get_class($provider);
+ }, $this->mountProviderCollection->getProviders());
+ $newProviders = array_diff($allProviders, $previouslySetupProviders);
+ $mounts = array_filter($mounts, function (IMountPoint $mount) use ($previouslySetupProviders) {
+ return !in_array($mount->getMountProvider(), $previouslySetupProviders);
+ });
+ $this->userMountCache->registerMounts($user, $mounts, $newProviders);
$cacheDuration = $this->config->getSystemValueInt('fs_mount_cache_duration', 5 * 60);
if ($cacheDuration > 0) {