From 16cfca6a5fb3db897246e6ac9ccb7420cf256240 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 16 Oct 2014 15:17:36 +0200 Subject: [PATCH] Better reuse of cache data for getFolderContents --- lib/private/files/view.php | 17 +++++++++++------ tests/lib/files/view.php | 5 +++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/private/files/view.php b/lib/private/files/view.php index a9577b193c..5f5f29ded4 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -964,15 +964,20 @@ class View { $cache = $storage->getCache($internalPath); $user = \OC_User::getUser(); - if ($cache->getStatus($internalPath) < Cache\Cache::COMPLETE) { + $data = $cache->get($internalPath); + $watcher = $storage->getWatcher($internalPath); + if (!$data or $data['size'] === -1) { + if (!$storage->file_exists($internalPath)) { + return array(); + } $scanner = $storage->getScanner($internalPath); $scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW); - } else { - $watcher = $storage->getWatcher($internalPath); - $watcher->checkUpdate($internalPath); + $data = $cache->get($internalPath); + } else if ($watcher->checkUpdate($internalPath, $data)) { + $data = $cache->get($internalPath); } - $folderId = $cache->getId($internalPath); + $folderId = $data['fileid']; /** * @var \OC\Files\FileInfo[] $files */ @@ -1034,7 +1039,7 @@ class View { break; } } - $rootEntry['path'] = substr($path . '/' . $rootEntry['name'], strlen($user) + 2); // full path without /$user/ + $rootEntry['path'] = substr(Filesystem::normalizePath($path . '/' . $rootEntry['name']), strlen($user) + 2); // full path without /$user/ // if sharing was disabled for the user we remove the share permissions if (\OCP\Util::isSharingDisabledForUser()) { diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 8d56ecd900..5f030f29fa 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -177,8 +177,9 @@ class View extends \PHPUnit_Framework_TestCase { function testCacheIncompleteFolder() { $storage1 = $this->getTestStorage(false); - \OC\Files\Filesystem::mount($storage1, array(), '/'); - $rootView = new \OC\Files\View(''); + \OC\Files\Filesystem::clearMounts(); + \OC\Files\Filesystem::mount($storage1, array(), '/incomplete'); + $rootView = new \OC\Files\View('/incomplete'); $entries = $rootView->getDirectoryContent('/'); $this->assertEquals(3, count($entries));