/** * Detect changes for one of the monitored paths. * * @param string $path * @param string $filenamePattern * @return boolean TRUE if any changes were detected in this path */ protected function detectChangesOnPath($path, $filenamePattern) { $currentDirectoryChanged = false; try { $currentSubDirectoriesAndFiles = $this->readMonitoredDirectoryRecursively($path, $filenamePattern); } catch (\Exception $exception) { $currentSubDirectoriesAndFiles = array(); $this->changedPaths[$path] = ChangeDetectionStrategyInterface::STATUS_DELETED; } $nowDetectedFilesAndDirectories = array(); if (!isset($this->directoriesAndFiles[$path])) { $this->directoriesAndFiles[$path] = array(); $this->changedPaths[$path] = ChangeDetectionStrategyInterface::STATUS_CREATED; } foreach ($currentSubDirectoriesAndFiles as $pathAndFilename) { $status = $this->changeDetectionStrategy->getFileStatus($pathAndFilename); if ($status !== ChangeDetectionStrategyInterface::STATUS_UNCHANGED) { $this->changedFiles[$pathAndFilename] = $status; $currentDirectoryChanged = true; } if (isset($this->directoriesAndFiles[$path][$pathAndFilename])) { unset($this->directoriesAndFiles[$path][$pathAndFilename]); } $nowDetectedFilesAndDirectories[$pathAndFilename] = 1; } if ($this->directoriesAndFiles[$path] !== array()) { foreach (array_keys($this->directoriesAndFiles[$path]) as $pathAndFilename) { $this->changedFiles[$pathAndFilename] = ChangeDetectionStrategyInterface::STATUS_DELETED; if ($this->changeDetectionStrategy instanceof StrategyWithMarkDeletedInterface) { $this->changeDetectionStrategy->setFileDeleted($pathAndFilename); } else { // This call is needed to mark the file deleted in any possibly existing caches of the strategy. // The return value is not important as we know this file doesn't exist so we set the status to DELETED anyway. $this->changeDetectionStrategy->getFileStatus($pathAndFilename); } } $currentDirectoryChanged = true; } if ($currentDirectoryChanged) { $this->setDetectedFilesForPath($path, $nowDetectedFilesAndDirectories); } return $currentDirectoryChanged; }