public static function copyFromFileSystem($path, vfsStreamDirectory $baseDir = null, $maxFileSize = 1048576)
{
if (null === $baseDir) {
$baseDir = vfsStreamWrapper::getRoot();
}
if (null === $baseDir) {
throw new \InvalidArgumentException('No baseDir given and no root directory set.');
}
$dir = new \DirectoryIterator($path);
foreach ($dir as $fileinfo) {
switch (filetype($fileinfo->getPathname())) {
case 'file':
if ($fileinfo->getSize() <= $maxFileSize) {
$content = file_get_contents($fileinfo->getPathname());
} else {
$content = new LargeFileContent($fileinfo->getSize());
}
self::newFile($fileinfo->getFilename(), octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4)))->withContent($content)->at($baseDir);
break;
case 'dir':
if (!$fileinfo->isDot()) {
self::copyFromFileSystem($fileinfo->getPathname(), self::newDirectory($fileinfo->getFilename(), octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4)))->at($baseDir), $maxFileSize);
}
break;
case 'block':
self::newBlock($fileinfo->getFilename(), octdec(substr(sprintf('%o', $fileinfo->getPerms()), -4)))->at($baseDir);
break;
}
}
return $baseDir;
}