diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2013-02-12 08:07:49 -0800 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2013-02-12 08:07:49 -0800 |
commit | 251b676a06a1fc5d0e2606865d8794c749aed3c3 (patch) | |
tree | f28bb9bd6c38b6fec333fabada0f889e6e7c4d9f /lib | |
parent | 8d9352a40d6b02e17889ba02962e0a3880e0995e (diff) | |
parent | b54dcd1999b0ce447dc6920ac8cd361095b8346d (diff) | |
download | nextcloud-server-251b676a06a1fc5d0e2606865d8794c749aed3c3.tar.gz nextcloud-server-251b676a06a1fc5d0e2606865d8794c749aed3c3.zip |
Merge pull request #1616 from owncloud/cache_fixes_rebase
Cache: reuse known folder sizes when doing a shallow scan - rebase
Diffstat (limited to 'lib')
-rw-r--r-- | lib/files/cache/scanner.php | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 5a9a119458e..88f208547f6 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -58,9 +58,10 @@ class Scanner { * scan a single file and store it in the cache * * @param string $file + * @param bool $checkExisting check existing folder sizes in the cache instead of always using -1 for folder size * @return array with metadata of the scanned file */ - public function scanFile($file) { + public function scanFile($file, $checkExisting = false) { \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId)); $data = $this->getData($file); if ($data) { @@ -73,7 +74,15 @@ class Scanner { $this->scanFile($parent); } } - $id = $this->cache->put($file, $data); + if ($checkExisting and $cacheData = $this->cache->get($file)) { + if ($data['size'] === -1) { + $data['size'] = $cacheData['size']; + } + if ($data['mtime'] === $cacheData['mtime']) { + $data['etag'] = $cacheData['etag']; + } + } + $this->cache->put($file, $data); } return $data; } @@ -99,20 +108,18 @@ class Scanner { while ($file = readdir($dh)) { if (!$this->isIgnoredFile($file)) { $child = ($path) ? $path . '/' . $file : $file; - $data = $this->scanFile($child); + $data = $this->scanFile($child, $recursive === self::SCAN_SHALLOW); if ($data) { - if ($data['mimetype'] === 'httpd/unix-directory') { + if ($data['size'] === -1) { if ($recursive === self::SCAN_RECURSIVE) { $childQueue[] = $child; $data['size'] = 0; } else { - $data['size'] = -1; + $size = -1; } - } else { } - if ($data['size'] === -1) { - $size = -1; - } elseif ($size !== -1) { + + if ($size !== -1) { $size += $data['size']; } } @@ -133,7 +140,7 @@ class Scanner { } return $size; } - + /** * @brief check if the file should be ignored when scanning * NOTE: files with a '.part' extension are ignored as well! @@ -143,8 +150,8 @@ class Scanner { */ private function isIgnoredFile($file) { if ($file === '.' || $file === '..' - || pathinfo($file,PATHINFO_EXTENSION) === 'part') - { + || pathinfo($file, PATHINFO_EXTENSION) === 'part' + ) { return true; } return false; |