From cfb7923e08ba1902fa5a5f72205cfcbb767b54ad Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 2 Feb 2022 16:12:57 +0100 Subject: [PATCH] store mountprovider for each mount in the mounts table this enabled more fine grained filesystem setup Signed-off-by: Robin Appelman --- .../lib/Config/ExternalMountPoint.php | 2 +- apps/files_sharing/lib/External/Mount.php | 2 +- apps/files_sharing/lib/SharedMount.php | 2 +- .../Version240000Date20220202150027.php | 37 +++++++++++++++++++ lib/composer/composer/autoload_classmap.php | 1 + lib/composer/composer/autoload_static.php | 1 + .../Files/Config/CachedMountFileInfo.php | 17 +++++++-- lib/private/Files/Config/CachedMountInfo.php | 21 ++++++++++- .../Files/Config/LazyStorageMountInfo.php | 4 ++ lib/private/Files/Config/UserMountCache.php | 34 +++++++++++------ .../Files/Mount/CacheMountProvider.php | 4 +- .../Files/Mount/LocalHomeMountProvider.php | 2 +- lib/private/Files/Mount/MountPoint.php | 25 ++++++++++++- .../Files/Mount/ObjectHomeMountProvider.php | 2 +- .../ObjectStorePreviewCacheMountProvider.php | 10 ++++- lib/private/Files/Node/LazyFolder.php | 2 +- lib/private/Files/Node/Root.php | 13 ++++--- lib/public/Files/Config/ICachedMountInfo.php | 8 ++++ lib/public/Files/Mount/IMountPoint.php | 8 ++++ tests/lib/Files/Node/FolderTest.php | 4 ++ version.php | 2 +- 21 files changed, 167 insertions(+), 34 deletions(-) create mode 100644 core/Migrations/Version240000Date20220202150027.php diff --git a/apps/files_external/lib/Config/ExternalMountPoint.php b/apps/files_external/lib/Config/ExternalMountPoint.php index 985e70bee030f..090e1c77cdf4b 100644 --- a/apps/files_external/lib/Config/ExternalMountPoint.php +++ b/apps/files_external/lib/Config/ExternalMountPoint.php @@ -34,7 +34,7 @@ class ExternalMountPoint extends MountPoint { public function __construct(StorageConfig $storageConfig, $storage, $mountpoint, $arguments = null, $loader = null, $mountOptions = null, $mountId = null) { $this->storageConfig = $storageConfig; - parent::__construct($storage, $mountpoint, $arguments, $loader, $mountOptions, $mountId); + parent::__construct($storage, $mountpoint, $arguments, $loader, $mountOptions, $mountId, ConfigAdapter::class); } public function getMountType() { diff --git a/apps/files_sharing/lib/External/Mount.php b/apps/files_sharing/lib/External/Mount.php index c8b74202ac741..2047dede39bf6 100644 --- a/apps/files_sharing/lib/External/Mount.php +++ b/apps/files_sharing/lib/External/Mount.php @@ -42,7 +42,7 @@ class Mount extends MountPoint implements MoveableMount { * @param \OC\Files\Storage\StorageFactory $loader */ public function __construct($storage, $mountpoint, $options, $manager, $loader = null) { - parent::__construct($storage, $mountpoint, $options, $loader); + parent::__construct($storage, $mountpoint, $options, $loader, null, null, MountProvider::class); $this->manager = $manager; } diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 7fd477d07e4b7..c8f5d0f64ae56 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -78,7 +78,7 @@ public function __construct($storage, array $mountpoints, $arguments, IStorageFa $newMountPoint = $this->verifyMountPoint($this->superShare, $mountpoints, $folderExistCache); $absMountPoint = '/' . $this->user . '/files' . $newMountPoint; - parent::__construct($storage, $absMountPoint, $arguments, $loader); + parent::__construct($storage, $absMountPoint, $arguments, $loader, null, null, MountProvider::class); } /** diff --git a/core/Migrations/Version240000Date20220202150027.php b/core/Migrations/Version240000Date20220202150027.php new file mode 100644 index 0000000000000..b13afa67d1ed2 --- /dev/null +++ b/core/Migrations/Version240000Date20220202150027.php @@ -0,0 +1,37 @@ +getTable('mounts'); + if (!$table->hasColumn('mount_provider_class')) { + $table->addColumn('mount_provider_class', Types::STRING, [ + 'notnull' => false, + 'length' => 128, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 2c984e8891810..00fefc81bc5fc 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1001,6 +1001,7 @@ 'OC\\Core\\Migrations\\Version23000Date20210930122352' => $baseDir . '/core/Migrations/Version23000Date20210930122352.php', 'OC\\Core\\Migrations\\Version23000Date20211203110726' => $baseDir . '/core/Migrations/Version23000Date20211203110726.php', 'OC\\Core\\Migrations\\Version23000Date20211213203940' => $baseDir . '/core/Migrations/Version23000Date20211213203940.php', + 'OC\\Core\\Migrations\\Version240000Date20220202150027' => $baseDir . '/core/Migrations/Version240000Date20220202150027.php', 'OC\\Core\\Migrations\\Version24000Date20211210141942' => $baseDir . '/core/Migrations/Version24000Date20211210141942.php', 'OC\\Core\\Migrations\\Version24000Date20211213081506' => $baseDir . '/core/Migrations/Version24000Date20211213081506.php', 'OC\\Core\\Migrations\\Version24000Date20211213081604' => $baseDir . '/core/Migrations/Version24000Date20211213081604.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 5ccf3acd7d7f8..1526714be3a81 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1030,6 +1030,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Migrations\\Version23000Date20210930122352' => __DIR__ . '/../../..' . '/core/Migrations/Version23000Date20210930122352.php', 'OC\\Core\\Migrations\\Version23000Date20211203110726' => __DIR__ . '/../../..' . '/core/Migrations/Version23000Date20211203110726.php', 'OC\\Core\\Migrations\\Version23000Date20211213203940' => __DIR__ . '/../../..' . '/core/Migrations/Version23000Date20211213203940.php', + 'OC\\Core\\Migrations\\Version240000Date20220202150027' => __DIR__ . '/../../..' . '/core/Migrations/Version240000Date20220202150027.php', 'OC\\Core\\Migrations\\Version24000Date20211210141942' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211210141942.php', 'OC\\Core\\Migrations\\Version24000Date20211213081506' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211213081506.php', 'OC\\Core\\Migrations\\Version24000Date20211213081604' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211213081604.php', diff --git a/lib/private/Files/Config/CachedMountFileInfo.php b/lib/private/Files/Config/CachedMountFileInfo.php index 7fdc26f7d5345..71a6ddb9ea99e 100644 --- a/lib/private/Files/Config/CachedMountFileInfo.php +++ b/lib/private/Files/Config/CachedMountFileInfo.php @@ -30,12 +30,21 @@ class CachedMountFileInfo extends CachedMountInfo implements ICachedMountFileInf /** @var string */ private $internalPath; - public function __construct(IUser $user, $storageId, $rootId, $mountPoint, $mountId, $rootInternalPath, $internalPath) { - parent::__construct($user, $storageId, $rootId, $mountPoint, $mountId, $rootInternalPath); + public function __construct( + IUser $user, + int $storageId, + int $rootId, + string $mountPoint, + ?int $mountId, + string $mountProvider, + string $rootInternalPath, + string $internalPath + ) { + parent::__construct($user, $storageId, $rootId, $mountPoint, $mountProvider, $mountId, $rootInternalPath); $this->internalPath = $internalPath; } - public function getInternalPath() { + public function getInternalPath(): string { if ($this->getRootInternalPath()) { return substr($this->internalPath, strlen($this->getRootInternalPath()) + 1); } else { @@ -43,7 +52,7 @@ public function getInternalPath() { } } - public function getPath() { + public function getPath(): string { return $this->getMountPoint() . $this->getInternalPath(); } } diff --git a/lib/private/Files/Config/CachedMountInfo.php b/lib/private/Files/Config/CachedMountInfo.php index e7e10cfe2af7d..c70dba100a4b2 100644 --- a/lib/private/Files/Config/CachedMountInfo.php +++ b/lib/private/Files/Config/CachedMountInfo.php @@ -58,6 +58,9 @@ class CachedMountInfo implements ICachedMountInfo { */ protected $rootInternalPath; + /** @var string */ + protected $mountProvider; + /** * CachedMountInfo constructor. * @@ -68,13 +71,25 @@ class CachedMountInfo implements ICachedMountInfo { * @param int|null $mountId * @param string $rootInternalPath */ - public function __construct(IUser $user, $storageId, $rootId, $mountPoint, $mountId = null, $rootInternalPath = '') { + public function __construct( + IUser $user, + int $storageId, + int $rootId, + string $mountPoint, + string $mountProvider, + int $mountId = null, + string $rootInternalPath = '' + ) { $this->user = $user; $this->storageId = $storageId; $this->rootId = $rootId; $this->mountPoint = $mountPoint; $this->mountId = $mountId; $this->rootInternalPath = $rootInternalPath; + if (strlen($mountProvider) > 128) { + throw new \Exception("Mount provider $mountProvider name exceeds the limit of 128 characters"); + } + $this->mountProvider = $mountProvider; } /** @@ -138,4 +153,8 @@ public function getMountId() { public function getRootInternalPath() { return $this->rootInternalPath; } + + public function getMountProvider(): string { + return $this->mountProvider; + } } diff --git a/lib/private/Files/Config/LazyStorageMountInfo.php b/lib/private/Files/Config/LazyStorageMountInfo.php index bfd632c5f6e88..fd3bbcbe0fbfd 100644 --- a/lib/private/Files/Config/LazyStorageMountInfo.php +++ b/lib/private/Files/Config/LazyStorageMountInfo.php @@ -81,4 +81,8 @@ public function getMountId() { public function getRootInternalPath() { return $this->mount->getInternalPath($this->mount->getMountPoint()); } + + public function getMountProvider(): string { + return $this->mount->getMountProvider(); + } } diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php index 71eb918a58c35..dc2640361e71d 100644 --- a/lib/private/Files/Config/UserMountCache.php +++ b/lib/private/Files/Config/UserMountCache.php @@ -164,7 +164,8 @@ private function findChangedMounts(array $newMounts, array $cachedMounts) { if ( $newMount->getMountPoint() !== $cachedMount->getMountPoint() || $newMount->getStorageId() !== $cachedMount->getStorageId() || - $newMount->getMountId() !== $cachedMount->getMountId() + $newMount->getMountId() !== $cachedMount->getMountId() || + $newMount->getMountProvider() !== $cachedMount->getMountProvider() ) { $changed[] = $newMount; } @@ -180,7 +181,8 @@ private function addToCache(ICachedMountInfo $mount) { 'root_id' => $mount->getRootId(), 'user_id' => $mount->getUser()->getUID(), 'mount_point' => $mount->getMountPoint(), - 'mount_id' => $mount->getMountId() + 'mount_id' => $mount->getMountId(), + 'mount_provider_class' => $mount->getMountProvider(), ], ['root_id', 'user_id']); } else { // in some cases this is legitimate, like orphaned shares @@ -195,6 +197,7 @@ private function updateCachedMount(ICachedMountInfo $mount) { ->set('storage_id', $builder->createNamedParameter($mount->getStorageId())) ->set('mount_point', $builder->createNamedParameter($mount->getMountPoint())) ->set('mount_id', $builder->createNamedParameter($mount->getMountId(), IQueryBuilder::PARAM_INT)) + ->set('mount_provider_class', $builder->createNamedParameter($mount->getMountProvider())) ->where($builder->expr()->eq('user_id', $builder->createNamedParameter($mount->getUser()->getUID()))) ->andWhere($builder->expr()->eq('root_id', $builder->createNamedParameter($mount->getRootId(), IQueryBuilder::PARAM_INT))); @@ -219,7 +222,15 @@ private function dbRowToMountInfo(array $row) { if (!is_null($mount_id)) { $mount_id = (int)$mount_id; } - return new CachedMountInfo($user, (int)$row['storage_id'], (int)$row['root_id'], $row['mount_point'], $mount_id, isset($row['path']) ? $row['path'] : ''); + return new CachedMountInfo( + $user, + (int)$row['storage_id'], + (int)$row['root_id'], + $row['mount_point'], + $row['mount_provider_class'] ?? '', + $mount_id, + isset($row['path']) ? $row['path'] : '', + ); } /** @@ -229,7 +240,7 @@ private function dbRowToMountInfo(array $row) { public function getMountsForUser(IUser $user) { if (!isset($this->mountsForUsers[$user->getUID()])) { $builder = $this->connection->getQueryBuilder(); - $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path') + $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class') ->from('mounts', 'm') ->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid')) ->where($builder->expr()->eq('user_id', $builder->createPositionalParameter($user->getUID()))); @@ -250,7 +261,7 @@ public function getMountsForUser(IUser $user) { */ public function getMountsForStorageId($numericStorageId, $user = null) { $builder = $this->connection->getQueryBuilder(); - $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path') + $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class') ->from('mounts', 'm') ->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid')) ->where($builder->expr()->eq('storage_id', $builder->createPositionalParameter($numericStorageId, IQueryBuilder::PARAM_INT))); @@ -272,7 +283,7 @@ public function getMountsForStorageId($numericStorageId, $user = null) { */ public function getMountsForRootId($rootFileId) { $builder = $this->connection->getQueryBuilder(); - $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path') + $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class') ->from('mounts', 'm') ->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid')) ->where($builder->expr()->eq('root_id', $builder->createPositionalParameter($rootFileId, IQueryBuilder::PARAM_INT))); @@ -286,10 +297,10 @@ public function getMountsForRootId($rootFileId) { /** * @param $fileId - * @return array + * @return array{int, string, int} * @throws \OCP\Files\NotFoundException */ - private function getCacheInfoFromFileId($fileId) { + private function getCacheInfoFromFileId($fileId): array { if (!isset($this->cacheInfoCache[$fileId])) { $builder = $this->connection->getQueryBuilder(); $query = $builder->select('storage', 'path', 'mimetype') @@ -303,7 +314,7 @@ private function getCacheInfoFromFileId($fileId) { if (is_array($row)) { $this->cacheInfoCache[$fileId] = [ (int)$row['storage'], - $row['path'], + (string)$row['path'], (int)$row['mimetype'] ]; } else { @@ -326,7 +337,7 @@ public function getMountsForFileId($fileId, $user = null) { return []; } $builder = $this->connection->getQueryBuilder(); - $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path') + $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id', 'f.path', 'mount_provider_class') ->from('mounts', 'm') ->innerJoin('m', 'filecache', 'f', $builder->expr()->eq('m.root_id', 'f.fileid')) ->where($builder->expr()->eq('storage_id', $builder->createPositionalParameter($storageId, IQueryBuilder::PARAM_INT))); @@ -343,7 +354,7 @@ public function getMountsForFileId($fileId, $user = null) { if ($fileId === (int)$row['root_id']) { return true; } - $internalMountPath = isset($row['path']) ? $row['path'] : ''; + $internalMountPath = $row['path'] ?? ''; return $internalMountPath === '' || substr($internalPath, 0, strlen($internalMountPath) + 1) === $internalMountPath . '/'; }); @@ -356,6 +367,7 @@ public function getMountsForFileId($fileId, $user = null) { $mount->getRootId(), $mount->getMountPoint(), $mount->getMountId(), + $mount->getMountProvider(), $mount->getRootInternalPath(), $internalPath ); diff --git a/lib/private/Files/Mount/CacheMountProvider.php b/lib/private/Files/Mount/CacheMountProvider.php index 16ecefb0dac41..90dfa0b05f309 100644 --- a/lib/private/Files/Mount/CacheMountProvider.php +++ b/lib/private/Files/Mount/CacheMountProvider.php @@ -61,8 +61,8 @@ public function getMountsForUser(IUser $user, IStorageFactory $loader) { } return [ - new MountPoint('\OC\Files\Storage\Local', '/' . $user->getUID() . '/cache', ['datadir' => $cacheDir, $loader]), - new MountPoint('\OC\Files\Storage\Local', '/' . $user->getUID() . '/uploads', ['datadir' => $cacheDir . '/uploads', $loader]) + new MountPoint('\OC\Files\Storage\Local', '/' . $user->getUID() . '/cache', ['datadir' => $cacheDir], $loader, null, null, self::class), + new MountPoint('\OC\Files\Storage\Local', '/' . $user->getUID() . '/uploads', ['datadir' => $cacheDir . '/uploads'], $loader, null, null, self::class) ]; } else { return []; diff --git a/lib/private/Files/Mount/LocalHomeMountProvider.php b/lib/private/Files/Mount/LocalHomeMountProvider.php index c7b2296c4a824..25a67fc157455 100644 --- a/lib/private/Files/Mount/LocalHomeMountProvider.php +++ b/lib/private/Files/Mount/LocalHomeMountProvider.php @@ -38,6 +38,6 @@ class LocalHomeMountProvider implements IHomeMountProvider { */ public function getHomeMountForUser(IUser $user, IStorageFactory $loader) { $arguments = ['user' => $user]; - return new MountPoint('\OC\Files\Storage\Home', '/' . $user->getUID(), $arguments, $loader); + return new MountPoint('\OC\Files\Storage\Home', '/' . $user->getUID(), $arguments, $loader, null, null, self::class); } } diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php index 368be0a917e07..d598355dbae53 100644 --- a/lib/private/Files/Mount/MountPoint.php +++ b/lib/private/Files/Mount/MountPoint.php @@ -34,6 +34,7 @@ use OC\Files\Storage\Storage; use OC\Files\Storage\StorageFactory; use OCP\Files\Mount\IMountPoint; +use OCP\Files\Storage\IStorageFactory; use OCP\ILogger; class MountPoint implements IMountPoint { @@ -76,6 +77,9 @@ class MountPoint implements IMountPoint { /** @var int|null */ protected $mountId; + /** @var string */ + protected $mountProvider; + /** * @param string|\OC\Files\Storage\Storage $storage * @param string $mountpoint @@ -83,9 +87,18 @@ class MountPoint implements IMountPoint { * @param \OCP\Files\Storage\IStorageFactory $loader * @param array $mountOptions mount specific options * @param int|null $mountId + * @param string|null $mountProvider * @throws \Exception */ - public function __construct($storage, $mountpoint, $arguments = null, $loader = null, $mountOptions = null, $mountId = null) { + public function __construct( + $storage, + string $mountpoint, + array $arguments = null, + IStorageFactory $loader = null, + array $mountOptions = null, + int $mountId = null, + string $mountProvider = null + ) { if (is_null($arguments)) { $arguments = []; } @@ -113,6 +126,12 @@ public function __construct($storage, $mountpoint, $arguments = null, $loader = $this->class = $storage; $this->arguments = $arguments; } + if ($mountProvider) { + if (strlen($mountProvider) > 128) { + throw new \Exception("Mount provider $mountProvider name exceeds the limit of 128 characters"); + } + } + $this->mountProvider = $mountProvider ?? ''; } /** @@ -286,4 +305,8 @@ public function getMountId() { public function getMountType() { return ''; } + + public function getMountProvider(): string { + return $this->mountProvider; + } } diff --git a/lib/private/Files/Mount/ObjectHomeMountProvider.php b/lib/private/Files/Mount/ObjectHomeMountProvider.php index 972d3893e6695..6a8a7d1f2fb7c 100644 --- a/lib/private/Files/Mount/ObjectHomeMountProvider.php +++ b/lib/private/Files/Mount/ObjectHomeMountProvider.php @@ -65,7 +65,7 @@ public function getHomeMountForUser(IUser $user, IStorageFactory $loader) { return null; } - return new MountPoint('\OC\Files\ObjectStore\HomeObjectStoreStorage', '/' . $user->getUID(), $config['arguments'], $loader); + return new MountPoint('\OC\Files\ObjectStore\HomeObjectStoreStorage', '/' . $user->getUID(), $config['arguments'], $loader, null, null, self::class); } /** diff --git a/lib/private/Files/Mount/ObjectStorePreviewCacheMountProvider.php b/lib/private/Files/Mount/ObjectStorePreviewCacheMountProvider.php index 2830e37ded32c..0043503f2cd95 100644 --- a/lib/private/Files/Mount/ObjectStorePreviewCacheMountProvider.php +++ b/lib/private/Files/Mount/ObjectStorePreviewCacheMountProvider.php @@ -69,7 +69,10 @@ public function getRootMounts(IStorageFactory $loader): array { AppdataPreviewObjectStoreStorage::class, '/appdata_' . $instanceId . '/preview/' . $parent . '/' . $child, $this->getMultiBucketObjectStore($i), - $loader + $loader, + null, + null, + self::class ); $i++; } @@ -87,7 +90,10 @@ public function getRootMounts(IStorageFactory $loader): array { $fakeRootStorageJail, '/appdata_' . $instanceId . '/preview/old-multibucket', null, - $loader + $loader, + null, + null, + self::class ); return $mountPoints; diff --git a/lib/private/Files/Node/LazyFolder.php b/lib/private/Files/Node/LazyFolder.php index 55421257886cf..bfdaeeccff7e1 100644 --- a/lib/private/Files/Node/LazyFolder.php +++ b/lib/private/Files/Node/LazyFolder.php @@ -38,7 +38,7 @@ class LazyFolder implements \OCP\Files\Folder { private $folderClosure; /** @var LazyFolder | null */ - private $folder = null; + protected $folder = null; /** * LazyFolder constructor. diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index 4a86207f25a81..b5707c8754333 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -29,6 +29,7 @@ * along with this program. If not, see * */ + namespace OC\Files\Node; use OC\Cache\CappedMemoryCache; @@ -87,8 +88,8 @@ class Root extends Folder implements IRootFolder { * @param IUserManager $userManager */ public function __construct($manager, - $view, - $user, + $view, + $user, IUserMountCache $userMountCache, ILogger $logger, IUserManager $userManager) { @@ -189,9 +190,9 @@ public function unMount($mount) { /** * @param string $path - * @throws \OCP\Files\NotFoundException - * @throws \OCP\Files\NotPermittedException * @return Node + * @throws \OCP\Files\NotPermittedException + * @throws \OCP\Files\NotFoundException */ public function get($path) { $path = $this->normalizePath($path); @@ -212,8 +213,8 @@ public function get($path) { /** * @param string $targetPath - * @throws \OCP\Files\NotPermittedException * @return \OC\Files\Node\Node + * @throws \OCP\Files\NotPermittedException */ public function rename($targetPath) { throw new NotPermittedException(); @@ -225,8 +226,8 @@ public function delete() { /** * @param string $targetPath - * @throws \OCP\Files\NotPermittedException * @return \OC\Files\Node\Node + * @throws \OCP\Files\NotPermittedException */ public function copy($targetPath) { throw new NotPermittedException(); diff --git a/lib/public/Files/Config/ICachedMountInfo.php b/lib/public/Files/Config/ICachedMountInfo.php index ba85e506d0410..812e79cdbc899 100644 --- a/lib/public/Files/Config/ICachedMountInfo.php +++ b/lib/public/Files/Config/ICachedMountInfo.php @@ -76,4 +76,12 @@ public function getMountId(); * @since 11.0.0 */ public function getRootInternalPath(); + + /** + * Get the class of the mount provider that this mount originates from + * + * @return string + * @since 24.0.0 + */ + public function getMountProvider(): string; } diff --git a/lib/public/Files/Mount/IMountPoint.php b/lib/public/Files/Mount/IMountPoint.php index 601f293fc16f3..66144bc4360a6 100644 --- a/lib/public/Files/Mount/IMountPoint.php +++ b/lib/public/Files/Mount/IMountPoint.php @@ -128,4 +128,12 @@ public function getMountId(); * @since 12.0.0 */ public function getMountType(); + + /** + * Get the class of the mount provider that this mount originates from + * + * @return string + * @since 24.0.0 + */ + public function getMountProvider(): string; } diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php index 067f728854454..72bd15d3922ac 100644 --- a/tests/lib/Files/Node/FolderTest.php +++ b/tests/lib/Files/Node/FolderTest.php @@ -499,6 +499,7 @@ public function testGetById() { 1, 0, '/bar/', + 'test', 1, '' )]); @@ -549,6 +550,7 @@ public function testGetByIdMountRoot() { 1, 0, '/bar/', + 'test', 1, '' )]); @@ -595,6 +597,7 @@ public function testGetByIdOutsideFolder() { 1, 0, '/bar/', + 'test', 1, '' )]); @@ -645,6 +648,7 @@ public function testGetByIdMultipleStorages() { 1, 0, '/bar/', + 'test', 1, '' ), diff --git a/version.php b/version.php index 5e5dd640db1a3..37a10a2c51bb2 100644 --- a/version.php +++ b/version.php @@ -30,7 +30,7 @@ // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = [24, 0, 0, 4]; +$OC_Version = [24, 0, 0, 5]; // The human readable string $OC_VersionString = '24.0.0 dev';