diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CompilerDebugDumpPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CompilerDebugDumpPass.php index 62884df180..28ad7082fa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CompilerDebugDumpPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CompilerDebugDumpPass.php @@ -20,12 +20,12 @@ class CompilerDebugDumpPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { + $filename = self::getCompilerLogFilename($container); + $filesystem = new Filesystem(); - $filesystem->dumpFile( - self::getCompilerLogFilename($container), - implode("\n", $container->getCompiler()->getLog()), - 0666 & ~umask() - ); + $filesystem->dumpFile($filename, implode("\n", $container->getCompiler()->getLog()), null); + // discard chmod failure (some filesystem may not support it) + @chmod($filename, 0666 & ~umask()); } public static function getCompilerLogFilename(ContainerInterface $container) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php index a9916cdbdc..6cf52b6522 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php @@ -28,11 +28,10 @@ class ContainerBuilderDebugDumpPass implements CompilerPassInterface public function process(ContainerBuilder $container) { $dumper = new XmlDumper($container); + $filename = $container->getParameter('debug.container.dump'); $filesystem = new Filesystem(); - $filesystem->dumpFile( - $container->getParameter('debug.container.dump'), - $dumper->dump(), - 0666 & ~umask() - ); + $filesystem->dumpFile($filename, $dumper->dump(), null); + // discard chmod failure (some filesystem may not support it) + @chmod($filename, 0666 & ~umask()); } } diff --git a/src/Symfony/Component/Config/ConfigCache.php b/src/Symfony/Component/Config/ConfigCache.php index cbb1984272..73de9c2e5f 100644 --- a/src/Symfony/Component/Config/ConfigCache.php +++ b/src/Symfony/Component/Config/ConfigCache.php @@ -95,10 +95,12 @@ class ConfigCache { $mode = 0666 & ~umask(); $filesystem = new Filesystem(); - $filesystem->dumpFile($this->file, $content, $mode); + $filesystem->dumpFile($this->file, $content, null); + @chmod($this->file, $mode); if (null !== $metadata && true === $this->debug) { - $filesystem->dumpFile($this->getMetaFile(), serialize($metadata), $mode); + $filesystem->dumpFile($this->getMetaFile(), serialize($metadata), null); + @chmod($this->getMetaFile(), $mode); } } diff --git a/src/Symfony/Component/Filesystem/CHANGELOG.md b/src/Symfony/Component/Filesystem/CHANGELOG.md index e6aee66a57..5b5cd6a6c6 100644 --- a/src/Symfony/Component/Filesystem/CHANGELOG.md +++ b/src/Symfony/Component/Filesystem/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.3.12 +------ + + * deprecated dumpFile() file mode argument. + 2.3.0 ----- diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php index 04f1d36131..69e3361146 100644 --- a/src/Symfony/Component/Filesystem/Filesystem.php +++ b/src/Symfony/Component/Filesystem/Filesystem.php @@ -444,10 +444,11 @@ class Filesystem /** * Atomically dumps content into a file. * - * @param string $filename The file to be written to. - * @param string $content The data to write into the file. - * @param integer $mode The file mode (octal). - * @throws IOException If the file cannot be written to. + * @param string $filename The file to be written to. + * @param string $content The data to write into the file. + * @param null|integer $mode The file mode (octal). If null, file permissions are not modified + * Deprecated since version 2.3.12, to be removed in 3.0. + * @throws IOException If the file cannot be written to. */ public function dumpFile($filename, $content, $mode = 0666) { @@ -466,6 +467,8 @@ class Filesystem } $this->rename($tmpFile, $filename, true); - $this->chmod($filename, $mode); + if (null !== $mode) { + $this->chmod($filename, $mode); + } } } diff --git a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php index 5877e484c6..510db4556c 100644 --- a/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php +++ b/src/Symfony/Component/Filesystem/Tests/FilesystemTest.php @@ -925,6 +925,21 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase } } + public function testDumpFileWithNullMode() + { + $filename = $this->workspace.DIRECTORY_SEPARATOR.'foo'.DIRECTORY_SEPARATOR.'baz.txt'; + + $this->filesystem->dumpFile($filename, 'bar', null); + + $this->assertFileExists($filename); + $this->assertSame('bar', file_get_contents($filename)); + + // skip mode check on Windows + if (!defined('PHP_WINDOWS_VERSION_MAJOR')) { + $this->assertEquals(600, $this->getFilePermissions($filename)); + } + } + public function testDumpFileOverwritesAnExistingFile() { $filename = $this->workspace.DIRECTORY_SEPARATOR.'foo.txt';