8000 bug #36581 [DI] fix not preloading excluded service factories (nicola… · symfony/symfony@4170346 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4170346

Browse files
bug #36581 [DI] fix not preloading excluded service factories (nicolas-grekas)
This PR was merged into the 5.1-dev branch. Discussion ---------- [DI] fix not preloading excluded service factories | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Commits ------- 2a20c6e [DI] fix not preloading excluded service factories
2 parents 6b48511 + 2a20c6e commit 4170346

File tree

6 files changed

+18
-14
lines changed

6 files changed

+18
-14
lines changed

src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int
118118
$warmer = $kernel->getContainer()->get('cache_warmer');
119119
// non optional warmers already ran during container compilation
120120
$warmer->enableOnlyOptionalWarmers();
121-
$preload = (array) $warmer->warmUp($warmupDir);
121+
$preload = (array) $warmer->warmUp($realCacheDir);
122122

123-
if (file_exists($preloadFile = $warmupDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) {
123+
if (file_exists($preloadFile = $realCacheDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) {
124124
Preloader::append($preloadFile, $preload);
125125
}
126126
}
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ class %s extends {$options['class']}
270270
271271
EOF;
272272
$files = [];
273-
273+
$preloadedFiles = [];
274274
$ids = $this->container->getRemovedIds();
275275
foreach ($this->container->getDefinitions() as $id => $definition) {
276276
if (!$definition->isPublic()) {
@@ -287,11 +287,16 @@ class %s extends {$options['class']}
287287
}
288288

289289
if (!$this->inlineFactories) {
290-
foreach ($this->generateServiceFiles($services) as $file => $c) {
290+
foreach ($this->generateServiceFiles($services) as $file => [$c, $preload]) {
291291
$files[$file] = sprintf($fileTemplate, substr($file, 0, -4), $c);
292+
293+
if ($preload) {
294+
$preloadedFiles[$file] = $file;
295+
}
292296
}
293297
foreach ($proxyClasses as $file => $c) {
294298
$files[$file] = "<?php\n".$c;
299+
$preloadedFiles[$file] = $file;
295300
}
296301
}
297302

@@ -304,11 +309,16 @@ class %s extends {$options['class']}
304309
}
305310

306311
$files[$options['class'].'.php'] = $code;
312+
$preloadedFiles[$options['class'].'.php'] = $options['class'].'.php';
307313
$hash = ucfirst(strtr(ContainerBuilder::hash($files), '._', 'xx'));
308314
$code = [];
309315

310316
foreach ($files as $file => $c) {
311317
$code["Container{$hash}/{$file}"] = substr_replace($c, "<?php\n\nnamespace Container{$hash};\n", 0, 6);
318+
319+
if (isset($preloadedFiles[$file])) {
320+
$preloadedFiles[$file] = "Container{$hash}/{$file}";
321+
}
312322
}
313323
$namespaceLine = $this->namespace ? "\nnamespace {$this->namespace};\n" : '';
314324
$time = $options['build_time'];
@@ -318,8 +328,8 @@ class %s extends {$options['class']}
318328
if ($this->preload && null !== $autoloadFile = $this->getAutoloadFile()) {
319329
$autoloadFile = substr($this->export($autoloadFile), 2, -1);
320330

321-
$factoryFiles = array_reverse(array_keys($code));
322-
$factoryFiles = implode("';\nrequire __DIR__.'/", $factoryFiles);
331+
$preloadedFiles = array_reverse($preloadedFiles);
332+
$preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles);
323333

324334
$code[$options['class'].'.preload.php'] = <<<EOF
325335
<?php
@@ -330,7 +340,7 @@ class %s extends {$options['class']}
330340
use Symfony\Component\DependencyInjection\Dumper\Preloader;
331341
332342
require $autoloadFile;
333-
require __DIR__.'/$factoryFiles';
343+
require __DIR__.'/$preloadedFiles';
334344
335345
\$classes = [];
336346
@@ -1036,7 +1046,7 @@ private function generateServiceFiles(array $services): iterable
10361046
ksort($definitions);
10371047
foreach ($definitions as $id => $definition) {
10381048
if ((list($file, $code) = $services[$id]) && null !== $file && ($definition->isPublic() || !$this->isTrivialInstance($definition) || isset($this->locatedIds[$id]))) {
1039-
yield $file => $code;
1049+
yield $file => [$code, !$definition->hasTag($this->preloadTags[1]) && !$definition->isDeprecated() && !$definition->hasErrors()];
10401050
}
10411051
}
10421052
}

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -907,10 +907,8 @@ require __DIR__.'/Container%s/getFooWithInlineService.php';
907907
require __DIR__.'/Container%s/getFooBarService.php';
908908
require __DIR__.'/Container%s/getFoo_BazService.php';
909909
require __DIR__.'/Container%s/getFooService.php';
910-
require __DIR__.'/Container%s/getFactorySimpleService.php';
911910
require __DIR__.'/Container%s/getFactoryServiceSimpleService.php';
912911
require __DIR__.'/Container%s/getFactoryServiceService.php';
913-
require __DIR__.'/Container%s/getDeprecatedServiceService.php';
914912
require __DIR__.'/Container%s/getDecoratorServiceWithNameService.php';
915913
require __DIR__.'/Container%s/getDecoratorServiceService.php';
916914
require __DIR__.'/Container%s/getConfiguredServiceSimpleService.php';
@@ -919,7 +917,6 @@ require __DIR__.'/Container%s/getBazService.php';
919917
require __DIR__.'/Container%s/getBar23Service.php';
920918
require __DIR__.'/Container%s/getBAR22Service.php';
921919
require __DIR__.'/Container%s/getBAR2Service.php';
922-
require __DIR__.'/Container%s/removed-ids.php';
923920

924921
$classes = [];
925922
$classes[] = 'Bar\FooClass';

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader;
548548

549549
require dirname(__DIR__, %d).'%svendor/autoload.php';
550550
require __DIR__.'/Container%s/ProjectServiceContainer.php';
551-
require __DIR__.'/Container%s/removed-ids.php';
552551

553552
$classes = [];
554553
$classes[] = 'Bar\FooClass';

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader;
171171

172172
require dirname(__DIR__, %d).'%svendor/autoload.php';
173173
require __DIR__.'/Container%s/ProjectServiceContainer.php';
174-
require __DIR__.'/Container%s/removed-ids.php';
175174

176175
$classes = [];
177176
$classes[] = 'Bar\FooClass';

src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ use Symfony\Component\DependencyInjection\Dumper\Preloader;
113113
require dirname(__DIR__, %d).'%svendor/autoload.php';
114114
require __DIR__.'/Container%s/ProjectServiceContainer.php';
115115
require __DIR__.'/Container%s/getNonSharedFooService.php';
116-
require __DIR__.'/Container%s/removed-ids.php';
117116

118117
$classes = [];
119118
$classes[] = 'Bar\FooLazyClass';

0 commit comments

Comments
 (0)
0