[HttpKernel] Remove old container files

This commit is contained in:
Nicolas Grekas 2017-08-12 11:24:07 +02:00
parent aef502b1a2
commit 2e4e6ad626
2 changed files with 54 additions and 4 deletions

View File

@ -584,6 +584,11 @@ abstract class Kernel implements KernelInterface, TerminableInterface
file_put_contents($this->getCacheDir().'/'.$class.'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()->getLog()) : '');
}
}
if ($oldContainer = file_exists($cache->getPath()) ? @include $cache->getPath() : false) {
$oldContainer = new \ReflectionClass($oldContainer);
}
$this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass());
$fresh = false;
@ -592,7 +597,15 @@ abstract class Kernel implements KernelInterface, TerminableInterface
$this->container = require $cache->getPath();
$this->container->set('kernel', $this);
if (!$fresh && $this->container->has('cache_warmer')) {
if ($fresh) {
return;
}
if ($oldContainer && get_class($this->container) !== $oldContainer->name) {
(new Filesystem())->remove(dirname($oldContainer->getFileName()));
}
if ($this->container->has('cache_warmer')) {
$this->container->get('cache_warmer')->warmUp($this->container->getParameter('kernel.cache_dir'));
}
}
@ -773,6 +786,9 @@ abstract class Kernel implements KernelInterface, TerminableInterface
@chmod($dir.$file, 0666 & ~umask());
}
// track changes made to the container directory
$container->fileExists(dirname($dir.$file));
$cache->write($rootCode, $container->getResources());
}

View File

@ -771,13 +771,38 @@ EOF;
public function testProjectDirExtension()
{
$kernel = new CustomProjectDirKernel('test', true);
$kernel = new CustomProjectDirKernel();
$kernel->boot();
$this->assertSame('foo', $kernel->getProjectDir());
$this->assertSame('foo', $kernel->getContainer()->getParameter('kernel.project_dir'));
}
public function testKernelReset()
{
(new Filesystem())->remove(__DIR__.'/Fixtures/cache');
$kernel = new CustomProjectDirKernel();
$kernel->boot();
$containerClass = get_class($kernel->getContainer());
$containerFile = (new \ReflectionClass($kernel->getContainer()))->getFileName();
unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
$kernel = new CustomProjectDirKernel();
$kernel->boot();
$this->assertSame($containerClass, get_class($kernel->getContainer()));
$this->assertFileExists($containerFile);
unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
$kernel = new CustomProjectDirKernel(function ($container) { $container->register('foo', 'stdClass'); });
$kernel->boot();
$this->assertTrue(get_class($kernel->getContainer()) !== $containerClass);
$this->assertFileNotExists($containerFile);
}
/**
* Returns a mock for the BundleInterface.
*
@ -878,12 +903,14 @@ class TestKernel implements HttpKernelInterface
class CustomProjectDirKernel extends Kernel
{
private $baseDir;
private $buildContainer;
public function __construct()
public function __construct(\Closure $buildContainer = null)
{
parent::__construct('test', false);
parent::__construct('custom', true);
$this->baseDir = 'foo';
$this->buildContainer = $buildContainer;
}
public function registerBundles()
@ -904,4 +931,11 @@ class CustomProjectDirKernel extends Kernel
{
return __DIR__.'/Fixtures';
}
protected function build(ContainerBuilder $container)
{
if ($build = $this->buildContainer) {
$build($container);
}
}
}