[Filesystem] keep exec perms when copying
This commit is contained in:
parent
7e660fdead
commit
085e813936
@ -69,10 +69,8 @@ class Filesystem
|
|||||||
throw new IOException(sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile);
|
throw new IOException(sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_executable($originFile)) {
|
// Like `cp`, preserve executable permission bits
|
||||||
// User Executable | Group Executable | Other Executable
|
@chmod($targetFile, fileperms($targetFile) | (fileperms($originFile) & 0111));
|
||||||
chmod($targetFile, fileperms($targetFile) | 0x0040 | 0x0008 | 0x0001);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stream_is_local($originFile) && $bytesCopied !== filesize($originFile)) {
|
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);
|
throw new IOException(sprintf('Failed to copy the whole content of "%s" to "%s %g bytes copied".', $originFile, $targetFile, $bytesCopied), 0, null, $originFile);
|
||||||
|
@ -1002,23 +1002,10 @@ class FilesystemTest extends FilesystemTestCase
|
|||||||
$targetFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_target_file';
|
$targetFilePath = $this->workspace.DIRECTORY_SEPARATOR.'copy_target_file';
|
||||||
|
|
||||||
file_put_contents($sourceFilePath, 'SOURCE FILE');
|
file_put_contents($sourceFilePath, 'SOURCE FILE');
|
||||||
chmod($sourceFilePath, 0755);
|
chmod($sourceFilePath, 0745);
|
||||||
|
|
||||||
$this->filesystem->copy($sourceFilePath, $targetFilePath);
|
$this->filesystem->copy($sourceFilePath, $targetFilePath);
|
||||||
|
|
||||||
$this->assertFilePermissions(755, $targetFilePath);
|
$this->assertFilePermissions(767, $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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user