Skip to content

Commit 33545e6

Browse files
committed
Merge pull request #986 from Flyingmana/patch-6
Make it possible to exclude classes (directories) for compilation
2 parents 3fc6455 + ab3f179 commit 33545e6

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@
1010

1111
class ClassesScanner
1212
{
13+
/**
14+
* @var array
15+
*/
16+
protected $excludePatterns = [];
17+
18+
/**
19+
* adds exclude patterns
20+
*
21+
* @param array $excludePatterns
22+
*/
23+
public function addExcludePatterns(array $excludePatterns)
24+
{
25+
$this->excludePatterns = array_merge($this->excludePatterns, $excludePatterns);
26+
}
27+
1328
/**
1429
* Retrieves list of classes for given path
1530
*
@@ -37,6 +52,11 @@ public function getList($path)
3752
if ($fileItem->getExtension() !== 'php') {
3853
continue;
3954
}
55+
foreach ($this->excludePatterns as $excludePattern) {
56+
if (preg_match($excludePattern, $fileItem->getRealPath())) {
57+
continue 2;
58+
}
59+
}
4060
$fileScanner = new FileScanner($fileItem->getRealPath());
4161
$classNames = $fileScanner->getClassNames();
4262
foreach ($classNames as $className) {

dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ class DirectoryScanner
1212
*
1313
* @param string $dir
1414
* @param array $patterns
15+
* @param string[] $excludePatterns
1516
* @return array
1617
*/
17-
public function scan($dir, array $patterns = [])
18+
public function scan($dir, array $patterns = [], array $excludePatterns = [])
1819
{
1920
$recursiveIterator = new \RecursiveIteratorIterator(
2021
new \RecursiveDirectoryIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS)
@@ -26,8 +27,15 @@ public function scan($dir, array $patterns = [])
2627
continue;
2728
}
2829

30+
$filePath = str_replace('\\', '/', $file->getRealPath());
31+
if (!empty($excludePatterns)) {
32+
foreach ($excludePatterns as $excludePattern) {
33+
if (preg_match($excludePattern, $filePath)) {
34+
continue 2;
35+
}
36+
}
37+
}
2938
foreach ($patterns as $type => $pattern) {
30-
$filePath = str_replace('\\', '/', $file->getRealPath());
3139
if (preg_match($pattern, $filePath)) {
3240
$output[$type][] = $filePath;
3341
break;

dev/tools/Magento/Tools/Di/compiler.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232
'extra-classes-file=s' => 'path to file with extra proxies and factories to generate',
3333
'generation=s' => 'absolute path to generated classes, <magento_root>/var/generation by default',
3434
'di=s' => 'absolute path to DI definitions directory, <magento_root>/var/di by default',
35+
'exclude-pattern=s' => 'allows to exclude Paths from compilation (default is #[\\\\/]m1[\\\\/]#i)',
3536
]
3637
);
3738
$opt->parse();
3839

3940
$generationDir = $opt->getOption('generation') ? $opt->getOption('generation') : $rootDir . '/var/generation';
4041
$diDir = $opt->getOption('di') ? $opt->getOption('di') : $rootDir . '/var/di';
42+
$fileExcludePatterns = $opt->getOption('exclude-pattern') ?
43+
[$opt->getOption('exclude-pattern')] : ['#[\\\\/]M1[\\\\/]#i'];
4144
$relationsFile = $diDir . '/relations.ser';
4245
$pluginDefFile = $diDir . '/plugins.ser';
4346

@@ -60,7 +63,7 @@
6063
$filePatterns = ['php' => '/.*\.php$/', 'di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'];
6164
$codeScanDir = realpath($rootDir . '/app');
6265
$directoryScanner = new Scanner\DirectoryScanner();
63-
$files = $directoryScanner->scan($codeScanDir, $filePatterns);
66+
$files = $directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns);
6467
$files['additional'] = [$opt->getOption('extra-classes-file')];
6568
$entities = [];
6669

@@ -144,11 +147,13 @@
144147
$validator = new \Magento\Framework\Code\Validator();
145148
$validator->add(new \Magento\Framework\Code\Validator\ConstructorIntegrity());
146149
$validator->add(new \Magento\Framework\Code\Validator\ContextAggregation());
150+
$classesScanner = new \Magento\Tools\Di\Code\Reader\ClassesScanner();
151+
$classesScanner->addExcludePatterns($fileExcludePatterns);
147152

148153
$directoryInstancesNamesList = new \Magento\Tools\Di\Code\Reader\InstancesNamesList\Directory(
149154
$log,
150155
new \Magento\Framework\Code\Reader\ClassReader(),
151-
new \Magento\Tools\Di\Code\Reader\ClassesScanner(),
156+
$classesScanner,
152157
$validator,
153158
$generationDir
154159
);

0 commit comments

Comments
 (0)