diff options
author | Julius Härtl <jus@bitgrid.net> | 2022-04-22 17:03:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 17:03:09 +0200 |
commit | fb59875071ca260f97aaef4d8842a3f4140429de (patch) | |
tree | 87809269bc3a2bdfc2f2e488b36d71b103e3ee05 /lib/private/Files/SetupManager.php | |
parent | a40db94dff6832b96be8d157fcfbf5c9d3c3ba95 (diff) | |
parent | 561a2071e4115e1a96afac343fef339a03a01c9a (diff) | |
download | nextcloud-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/private/Files/SetupManager.php')
-rw-r--r-- | lib/private/Files/SetupManager.php | 15 |
1 files changed, 12 insertions, 3 deletions
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) { |