diff options
author | Robin Appelman <robin@icewind.nl> | 2017-12-04 15:16:39 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2017-12-04 15:18:23 +0100 |
commit | 414458016793832207b7375ad30652d5a88504d0 (patch) | |
tree | a3130e46d82b8f855f06fbbab23fac5839b58211 /apps | |
parent | 6d8de960c9773863db0df489028cee4b046c4a1b (diff) | |
download | nextcloud-server-414458016793832207b7375ad30652d5a88504d0.tar.gz nextcloud-server-414458016793832207b7375ad30652d5a88504d0.zip |
delay calculating the shared cache root until it's used
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_sharing/lib/Cache.php | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/apps/files_sharing/lib/Cache.php b/apps/files_sharing/lib/Cache.php index 0cc1ac4ee89..e4e298e4a2e 100644 --- a/apps/files_sharing/lib/Cache.php +++ b/apps/files_sharing/lib/Cache.php @@ -63,23 +63,29 @@ class Cache extends CacheJail { $this->sourceRootInfo = $sourceRootInfo; $this->numericId = $sourceRootInfo->getStorageId(); - $absoluteRoot = $this->sourceRootInfo->getPath(); - - // the sourceRootInfo path is the absolute path of the folder in the "real" storage - // in the case where a folder is shared from a Jail we need to ensure that the share Jail - // has it's root set relative to the source Jail - $currentStorage = $storage->getSourceStorage(); - if ($currentStorage->instanceOfStorage(Jail::class)) { - /** @var Jail $currentStorage */ - $absoluteRoot = $currentStorage->getJailedPath($absoluteRoot); - } - parent::__construct( null, - $absoluteRoot + null ); } + protected function getRoot() { + if (is_null($this->root)) { + $absoluteRoot = $this->sourceRootInfo->getPath(); + + // the sourceRootInfo path is the absolute path of the folder in the "real" storage + // in the case where a folder is shared from a Jail we need to ensure that the share Jail + // has it's root set relative to the source Jail + $currentStorage = $this->storage->getSourceStorage(); + if ($currentStorage->instanceOfStorage(Jail::class)) { + /** @var Jail $currentStorage */ + $absoluteRoot = $currentStorage->getJailedPath($absoluteRoot); + } + $this->root = $absoluteRoot; + } + return $this->root; + } + public function getCache() { if (is_null($this->cache)) { $sourceStorage = $this->storage->getSourceStorage(); @@ -103,7 +109,7 @@ class Cache extends CacheJail { public function get($file) { if ($this->rootUnchanged && ($file === '' || $file === $this->sourceRootInfo->getId())) { - return $this->formatCacheEntry(clone $this->sourceRootInfo); + return $this->formatCacheEntry(clone $this->sourceRootInfo, ''); } return parent::get($file); } @@ -128,16 +134,20 @@ class Cache extends CacheJail { return parent::moveFromCache($sourceCache, $sourcePath, $targetPath); } - protected function formatCacheEntry($entry) { - $path = isset($entry['path']) ? $entry['path'] : ''; - $entry = parent::formatCacheEntry($entry); + protected function formatCacheEntry($entry, $path = null) { + if (is_null($path)) { + $path = isset($entry['path']) ? $entry['path'] : ''; + $entry['path'] = $this->getJailedPath($path); + } else { + $entry['path'] = $path; + } $sharePermissions = $this->storage->getPermissions($path); if (isset($entry['permissions'])) { $entry['permissions'] &= $sharePermissions; } else { $entry['permissions'] = $sharePermissions; } - $entry['uid_owner'] = $this->storage->getOwner($path); + $entry['uid_owner'] = $this->storage->getOwner(''); $entry['displayname_owner'] = $this->getOwnerDisplayName(); if ($path === '') { $entry['is_share_mount_point'] = true; |