[Filesystem] Prevented infiite loop on windows while calling mirror on symlink. Added test for mirroring symlinks.
This commit is contained in:
parent
127cff0aa8
commit
efad5d5452
@ -229,12 +229,12 @@ class Filesystem
|
||||
}
|
||||
|
||||
foreach ($iterator as $file) {
|
||||
$target = $targetDir.'/'.str_replace($originDir.DIRECTORY_SEPARATOR, '', $file->getPathname());
|
||||
$target = str_replace($originDir, $targetDir, $file->getPathname());
|
||||
|
||||
if (is_link($file)) {
|
||||
$this->symlink($file, $target);
|
||||
} elseif (is_dir($file)) {
|
||||
if (is_dir($file)) {
|
||||
$this->mkdir($target);
|
||||
} elseif (!$copyOnWindows && is_link($file)) {
|
||||
$this->symlink($file, $target);
|
||||
} elseif (is_file($file) || ($copyOnWindows && is_link($file))) {
|
||||
$this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
|
||||
} else {
|
||||
|
@ -483,6 +483,25 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertFileEquals($file2, $targetPath.'file2');
|
||||
}
|
||||
|
||||
public function testMirrorCopiesLinks()
|
||||
{
|
||||
$this->markAsSkippeIfSymlinkIsMissing();
|
||||
|
||||
$sourcePath = $this->workspace.DIRECTORY_SEPARATOR.'source'.DIRECTORY_SEPARATOR;
|
||||
|
||||
mkdir($sourcePath);
|
||||
file_put_contents($sourcePath.'file1', 'FILE1');
|
||||
symlink($sourcePath.'file1', $sourcePath.'link1');
|
||||
|
||||
$targetPath = $this->workspace.DIRECTORY_SEPARATOR.'target'.DIRECTORY_SEPARATOR;
|
||||
|
||||
$this->filesystem->mirror($sourcePath, $targetPath);
|
||||
|
||||
$this->assertTrue(is_dir($targetPath));
|
||||
$this->assertFileEquals($sourcePath.'file1', $targetPath.DIRECTORY_SEPARATOR.'link1');
|
||||
$this->assertTrue(is_link($targetPath.DIRECTORY_SEPARATOR.'link1'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providePathsForIsAbsolutePath
|
||||
*/
|
||||
|
Reference in New Issue
Block a user