/**
  * 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;
 }