bug #10532 Fixed regression when using Symfony on filesystems without chmod support (fabpot)
This PR was merged into the 2.3 branch.
Discussion
----------
Fixed regression when using Symfony on filesystems without chmod support
| Q | A
| ------------- | ---
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #8205
| License | MIT
| Doc PR | n/a
Commits
-------
cefb67a
Fix #8205 : Deprecate file mode update when calling dumpFile
This commit is contained in:
commit
ca5eea5c19
@ -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)
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,11 @@
|
||||
CHANGELOG
|
||||
=========
|
||||
|
||||
2.3.12
|
||||
------
|
||||
|
||||
* deprecated dumpFile() file mode argument.
|
||||
|
||||
2.3.0
|
||||
-----
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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';
|
||||
|
Reference in New Issue
Block a user