[Filesystem] keep exec perms when copying

This commit is contained in:
Nicolas Grekas 2015-01-03 20:08:02 +01:00
parent 7e660fdead
commit 085e813936
2 changed files with 4 additions and 19 deletions

View File

@ -69,10 +69,8 @@ class Filesystem
throw new IOException(sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile);
}
if (is_executable($originFile)) {
// User Executable | Group Executable | Other Executable
chmod($targetFile, fileperms($targetFile) | 0x0040 | 0x0008 | 0x0001);
}
// Like `cp`, preserve executable permission bits
@chmod($targetFile, fileperms($targetFile) | (fileperms($originFile) & 0111));
if (stream_is_local($originFile) && $bytesCopied !== filesize($originFile)) {
throw new IOException(sprintf('Failed to copy the whole content of "%s" to "%s %g bytes copied".', $originFile, $targetFile, $bytesCopied), 0, null, $originFile);

View File

@ -1002,23 +1002,10 @@ class FilesystemTest extends FilesystemTestCase
$targetFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_target_file';
file_put_contents($sourceFilePath, 'SOURCE FILE');
chmod($sourceFilePath, 0755);
chmod($sourceFilePath, 0745);
$this->filesystem->copy($sourceFilePath, $targetFilePath);
$this->assertFilePermissions(755, $targetFilePath);
}
public function testCopyShouldNotKeepWritePermissionOtherThanCurrentUser()
{
$sourceFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_source_file';
$targetFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_target_file';
file_put_contents($sourceFilePath, 'SOURCE FILE');
chmod($sourceFilePath, 0777);
$this->filesystem->copy($sourceFilePath, $targetFilePath);
$this->assertFilePermissions(755, $targetFilePath);
$this->assertFilePermissions(767, $targetFilePath);
}
}