diff options
author | Jörn Friedrich Dreyer <jfd@butonic.de> | 2013-03-22 13:52:07 +0100 |
---|---|---|
committer | Jörn Friedrich Dreyer <jfd@butonic.de> | 2013-03-28 12:15:27 +0100 |
commit | 4a70315ad1bb58da57b815afe9c723bf96fb521f (patch) | |
tree | 94635053d112c8129d1e8fb80a635811e36b590c | |
parent | 7098bcd4b7fbcfeefa8afb07cda77abccdeb9ed0 (diff) | |
download | nextcloud-server-4a70315ad1bb58da57b815afe9c723bf96fb521f.tar.gz nextcloud-server-4a70315ad1bb58da57b815afe9c723bf96fb521f.zip |
ignore files in scanFile instead of scan to catch all occurences.
-rw-r--r-- | lib/files/cache/scanner.php | 67 |
1 files changed, 42 insertions, 25 deletions
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 661ece5b120..4eaea947e51 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -62,32 +62,36 @@ class Scanner { * @return array with metadata of the scanned 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) { - if ($file) { - $parent = dirname($file); - if ($parent === '.') { - $parent = ''; - } - if (!$this->cache->inCache($parent)) { - $this->scanFile($parent); + if (!$this->isIgnoredFile($file)) { + \OC_Hook::emit('\OC\Files\Cache\Scanner', 'scan_file', array('path' => $file, 'storage' => $this->storageId)); + $data = $this->getData($file); + if ($data) { + if ($file) { + $parent = dirname($file); + if ($parent === '.') { + $parent = ''; + } + if (!$this->cache->inCache($parent)) { + $this->scanFile($parent); + } } - } - if($cacheData = $this->cache->get($file)) { - if ($data['mtime'] === $cacheData['mtime'] && - $data['size'] === $cacheData['size']) { - $data['etag'] = $cacheData['etag']; + if($cacheData = $this->cache->get($file)) { + if ($data['mtime'] === $cacheData['mtime'] && + $data['size'] === $cacheData['size']) { + $data['etag'] = $cacheData['etag']; + } } - } - if ($checkExisting and $cacheData) { - if ($data['size'] === -1) { - $data['size'] = $cacheData['size']; + if ($checkExisting and $cacheData) { + if ($data['size'] === -1) { + $data['size'] = $cacheData['size']; + } } + $this->cache->put($file, $data); } - $this->cache->put($file, $data); + return $data; } - return $data; + \OCP\Util::writeLog('scanner', 'Ignoring '.$file.' and not triggering scan_file hook.', \OCP\Util::DEBUG); + return null; } /** @@ -109,8 +113,8 @@ class Scanner { if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) { \OC_DB::beginTransaction(); while ($file = readdir($dh)) { - if (!$this->isIgnoredFile($file)) { - $child = ($path) ? $path . '/' . $file : $file; + $child = ($path) ? $path . '/' . $file : $file; + if (!$this->isIgnoredDir($file)) { $data = $this->scanFile($child, $recursive === self::SCAN_SHALLOW); if ($data) { if ($data['size'] === -1) { @@ -145,6 +149,20 @@ class Scanner { } /** + * @brief check if the directory should be ignored when scanning + * NOTE: the special directories . and .. would cause never ending recursion + * @param String $dir + * @return boolean + */ + private function isIgnoredDir($dir) { + if ($dir === '.' || $dir === '..' + || \OC\Files\Filesystem::isFileBlacklisted($file) + ) { + return true; + } + return false; + } + /** * @brief check if the file should be ignored when scanning * NOTE: files with a '.part' extension are ignored as well! * prevents unfinished put requests to be scanned @@ -152,8 +170,7 @@ class Scanner { * @return boolean */ private function isIgnoredFile($file) { - if ($file === '.' || $file === '..' - || pathinfo($file, PATHINFO_EXTENSION) === 'part' + if (pathinfo($file, PATHINFO_EXTENSION) === 'part' || \OC\Files\Filesystem::isFileBlacklisted($file) ) { return true; |