From 94f3becea65c22ac6fce2cbaf6b480a0fca5d0df Mon Sep 17 00:00:00 2001 From: Flyingmana Date: Wed, 21 Jan 2015 10:23:59 +0100 Subject: [PATCH 1/4] move str_replace out of foreach Always has the same result, so repeated execution was not necessary --- dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php b/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php index 193114179d2ec..cf4b0f371675e 100644 --- a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php +++ b/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php @@ -26,8 +26,8 @@ public function scan($dir, array $patterns = []) continue; } + $filePath = str_replace('\\', '/', $file->getRealPath()); foreach ($patterns as $type => $pattern) { - $filePath = str_replace('\\', '/', $file->getRealPath()); if (preg_match($pattern, $filePath)) { $output[$type][] = $filePath; break; From 6a5c9420a89f13f10928be618fba4406f12f9bd0 Mon Sep 17 00:00:00 2001 From: Flyingmana Date: Wed, 21 Jan 2015 10:47:00 +0100 Subject: [PATCH 2/4] allow exclude patterns for DI Directory Scanner --- .../Magento/Tools/Di/Code/Scanner/DirectoryScanner.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php b/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php index cf4b0f371675e..45a9fb36a9b94 100644 --- a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php +++ b/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php @@ -12,9 +12,10 @@ class DirectoryScanner * * @param string $dir * @param array $patterns + * @param string[] $excludePatterns * @return array */ - public function scan($dir, array $patterns = []) + public function scan($dir, array $patterns = [], array $excludePatterns = []) { $recursiveIterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS) @@ -27,6 +28,13 @@ public function scan($dir, array $patterns = []) } $filePath = str_replace('\\', '/', $file->getRealPath()); + if (!empty($excludePatterns)) { + foreach ($excludePatterns as $excludePattern) { + if (preg_match($excludePattern, $filePath)) { + continue 2; + } + } + } foreach ($patterns as $type => $pattern) { if (preg_match($pattern, $filePath)) { $output[$type][] = $filePath; From 9d3bae539bcfcc18fac4e7c82f85a5dad2d1dea1 Mon Sep 17 00:00:00 2001 From: Flyingmana Date: Wed, 21 Jan 2015 11:14:36 +0100 Subject: [PATCH 3/4] allow exclude patterns for ClassesScanner --- .../Tools/Di/Code/Reader/ClassesScanner.php | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php b/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php index 2c397905299a4..79fef39104b65 100644 --- a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php +++ b/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php @@ -10,6 +10,21 @@ class ClassesScanner { + /** + * @var array + */ + protected $excludePatterns = []; + + /** + * adds exclude patterns + * + * @param array $excludePatterns + */ + public function addExcludePatterns(array $excludePatterns) + { + $this->excludePatterns = array_merge($this->excludePatterns, $excludePatterns); + } + /** * Retrieves list of classes for given path * @@ -37,6 +52,11 @@ public function getList($path) if ($fileItem->getExtension() !== 'php') { continue; } + foreach ($this->excludePatterns as $excludePattern) { + if (preg_match($excludePattern, $fileItem->getRealPath())) { + continue 2; + } + } $fileScanner = new FileScanner($fileItem->getRealPath()); $classNames = $fileScanner->getClassNames(); foreach ($classNames as $className) { From ab3f17900f3b93a8b8b474497cc3b88e2368210c Mon Sep 17 00:00:00 2001 From: Flyingmana Date: Tue, 24 Feb 2015 22:18:23 +0100 Subject: [PATCH 4/4] add exclude-pattern argument to compiler --- dev/tools/Magento/Tools/Di/compiler.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dev/tools/Magento/Tools/Di/compiler.php b/dev/tools/Magento/Tools/Di/compiler.php index 208fe2991b5c7..6f049f0926cd6 100644 --- a/dev/tools/Magento/Tools/Di/compiler.php +++ b/dev/tools/Magento/Tools/Di/compiler.php @@ -32,12 +32,15 @@ 'extra-classes-file=s' => 'path to file with extra proxies and factories to generate', 'generation=s' => 'absolute path to generated classes, /var/generation by default', 'di=s' => 'absolute path to DI definitions directory, /var/di by default', + 'exclude-pattern=s' => 'allows to exclude Paths from compilation (default is #[\\\\/]m1[\\\\/]#i)', ] ); $opt->parse(); $generationDir = $opt->getOption('generation') ? $opt->getOption('generation') : $rootDir . '/var/generation'; $diDir = $opt->getOption('di') ? $opt->getOption('di') : $rootDir . '/var/di'; + $fileExcludePatterns = $opt->getOption('exclude-pattern') ? + [$opt->getOption('exclude-pattern')] : ['#[\\\\/]M1[\\\\/]#i']; $relationsFile = $diDir . '/relations.ser'; $pluginDefFile = $diDir . '/plugins.ser'; @@ -60,7 +63,7 @@ $filePatterns = ['php' => '/.*\.php$/', 'di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']; $codeScanDir = realpath($rootDir . '/app'); $directoryScanner = new Scanner\DirectoryScanner(); - $files = $directoryScanner->scan($codeScanDir, $filePatterns); + $files = $directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns); $files['additional'] = [$opt->getOption('extra-classes-file')]; $entities = []; @@ -144,11 +147,13 @@ $validator = new \Magento\Framework\Code\Validator(); $validator->add(new \Magento\Framework\Code\Validator\ConstructorIntegrity()); $validator->add(new \Magento\Framework\Code\Validator\ContextAggregation()); + $classesScanner = new \Magento\Tools\Di\Code\Reader\ClassesScanner(); + $classesScanner->addExcludePatterns($fileExcludePatterns); $directoryInstancesNamesList = new \Magento\Tools\Di\Code\Reader\InstancesNamesList\Directory( $log, new \Magento\Framework\Code\Reader\ClassReader(), - new \Magento\Tools\Di\Code\Reader\ClassesScanner(), + $classesScanner, $validator, $generationDir );