1
0
Fork 0

Factor the filesCode generation into a separate method.

pull/2139/head
Andreas Hennings 2013-07-23 16:37:54 +02:00
parent f98a8f472e
commit 8e9bdfb4da
5 changed files with 68 additions and 22 deletions

View File

@ -167,12 +167,6 @@ EOF;
} }
$classmapFile .= ");\n"; $classmapFile .= ");\n";
$filesCode = "";
$autoloads['files'] = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($autoloads['files']));
foreach ($autoloads['files'] as $functionFile) {
$filesCode .= 'require '.$this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile).";\n";
}
if (!$suffix) { if (!$suffix) {
$suffix = md5(uniqid('', true)); $suffix = md5(uniqid('', true));
} }
@ -182,13 +176,11 @@ EOF;
if ($includePathFile = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) { if ($includePathFile = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
file_put_contents($targetDir.'/include_paths.php', $includePathFile); file_put_contents($targetDir.'/include_paths.php', $includePathFile);
} }
if ($filesCode) { if ($includeFilesFile = $this->getIncludeFilesFile($autoloads['files'], $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
$filesCode = "<?php\n\n".rtrim($filesCode)."\n"; file_put_contents($targetDir.'/autoload_files.php', $includeFilesFile);
file_put_contents($targetDir.'/autoload_files.php', $filesCode);
$filesCode = " require __DIR__ . '/autoload_files.php';";
} }
file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix)); file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix));
file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, true, (bool) $includePathFile, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath)); file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, true, (bool) $includePathFile, $targetDirLoader, (bool) $includeFilesFile, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath));
// use stream_copy_to_stream instead of copy // use stream_copy_to_stream instead of copy
// to work around https://bugs.php.net/bug.php?id=64634 // to work around https://bugs.php.net/bug.php?id=64634
@ -303,6 +295,31 @@ EOF;
return $includePathsFile . ");\n"; return $includePathsFile . ");\n";
} }
protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
{
$filesCode = '';
$files = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($files));
foreach ($files as $functionFile) {
$filesCode .= 'require '.$this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile).";\n";
}
if (!$filesCode) {
return FALSE;
}
$filesCode = rtrim($filesCode);
return <<<EOF
<?php
// autoload_files.php generated by Composer
\$vendorDir = $vendorPathCode;
\$baseDir = $appBaseDirCode;
$filesCode
EOF;
}
protected function getPathCode(Filesystem $filesystem, $basePath, $vendorPath, $path) protected function getPathCode(Filesystem $filesystem, $basePath, $vendorPath, $path)
{ {
if (!$filesystem->isAbsolutePath($path)) { if (!$filesystem->isAbsolutePath($path)) {
@ -343,7 +360,7 @@ return ComposerAutoloaderInit$suffix::getLoader();
AUTOLOAD; AUTOLOAD;
} }
protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath) protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $useIncludeFiles, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath)
{ {
// TODO the class ComposerAutoloaderInit should be revert to a closure // TODO the class ComposerAutoloaderInit should be revert to a closure
// when APC has been fixed: // when APC has been fixed:
@ -352,10 +369,6 @@ AUTOLOAD;
// - https://bugs.php.net/bug.php?id=61576 // - https://bugs.php.net/bug.php?id=61576
// - https://bugs.php.net/bug.php?id=59298 // - https://bugs.php.net/bug.php?id=59298
if ($filesCode) {
$filesCode = "\n\n".rtrim($filesCode);
}
$file = <<<HEADER $file = <<<HEADER
<?php <?php
@ -436,9 +449,22 @@ REGISTER_AUTOLOAD;
} }
$file .= <<<METHOD_FOOTER $file .= <<<REGISTER_LOADER
\$loader->register(true);{$filesCode} \$loader->register(true);
REGISTER_LOADER;
if ($useIncludeFiles) {
$file .= <<<INCLUDE_FILES
require __DIR__ . '/autoload_files.php';
INCLUDE_FILES;
}
$file .= <<<METHOD_FOOTER
return \$loader; return \$loader;
} }

View File

@ -1,4 +1,9 @@
<?php <?php
// autoload_files.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
require $baseDir . '/foo.php'; require $baseDir . '/foo.php';
require $baseDir . '/bar.php'; require $baseDir . '/bar.php';

View File

@ -1,5 +1,10 @@
<?php <?php
// autoload_files.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
require $vendorDir . '/c/lorem/testC.php'; require $vendorDir . '/c/lorem/testC.php';
require $vendorDir . '/z/foo/testA.php'; require $vendorDir . '/z/foo/testA.php';
require $vendorDir . '/d/d/testD.php'; require $vendorDir . '/d/d/testD.php';

View File

@ -1,5 +1,10 @@
<?php <?php
// autoload_files.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
require $vendorDir . '/a/a/test.php'; require $vendorDir . '/a/a/test.php';
require $vendorDir . '/b/b/test2.php'; require $vendorDir . '/b/b/test2.php';
require $vendorDir . '/c/c/foo/bar/test3.php'; require $vendorDir . '/c/c/foo/bar/test3.php';

View File

@ -1,4 +1,9 @@
<?php <?php
// autoload_files.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
require $baseDir . '/foo.php'; require $baseDir . '/foo.php';
require $baseDir . '/bar.php'; require $baseDir . '/bar.php';