Sfoglia il codice sorgente

Add config option to set if the PHP include path should automatically be used when generating the autoloader

Pierre du Plessis 12 anni fa
parent
commit
84b34b70e0

+ 10 - 2
src/Composer/Autoload/AutoloadGenerator.php

@@ -30,6 +30,7 @@ class AutoloadGenerator
         $filesystem = new Filesystem();
         $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
         $vendorPath = strtr(realpath($config->get('vendor-dir')), '\\', '/');
+        $useGlobalIncludePath = (bool) $config->get('use-include-path');
         $targetDir = $vendorPath.'/'.$targetDir;
         $filesystem->ensureDirectoryExists($targetDir);
 
@@ -171,7 +172,7 @@ EOF;
             file_put_contents($targetDir.'/include_paths.php', $includePathFile);
         }
         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));
+        file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, true, (bool) $includePathFile, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath));
         copy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php');
     }
 
@@ -326,7 +327,7 @@ return ComposerAutoloaderInit$suffix::getLoader();
 AUTOLOAD;
     }
 
-    protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix)
+    protected function getAutoloadRealFile($usePSR0, $useClassMap, $useIncludePath, $targetDirLoader, $filesCode, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath)
     {
         // TODO the class ComposerAutoloaderInit should be revert to a closure
         // when APC has been fixed:
@@ -403,6 +404,13 @@ PSR0;
 CLASSMAP;
         }
 
+        if ($useGlobalIncludePath) {
+            $file .= <<<'INCLUDEPATH'
+        $loader->setUseIncludePath(true);
+
+INCLUDEPATH;
+        }
+
         if ($targetDirLoader) {
             $file .= <<<REGISTER_AUTOLOAD
         spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'autoload'), true, true);

+ 4 - 0
src/Composer/Command/ConfigCommand.php

@@ -246,6 +246,10 @@ EOT
                 function ($val) { return true; },
                 function ($val) { return $val !== 'false' && (bool) $val; }
             ),
+            'use-include-path' => array(
+                function ($val) { return true; },
+                function ($val) { return $val !== 'false' && (bool) $val; }
+            ),
         );
         $multiConfigValues = array(
             'github-protocols' => array(

+ 1 - 0
src/Composer/Config.php

@@ -31,6 +31,7 @@ class Config
         'cache-files-dir' => '{$cache-dir}/files',
         'cache-repo-dir' => '{$cache-dir}/repo',
         'cache-vcs-dir' => '{$cache-dir}/vcs',
+        'use-include-path' => false,
     );
 
     public static $defaultRepositories = array(

+ 14 - 1
tests/Composer/Test/Autoload/AutoloadGeneratorTest.php

@@ -40,13 +40,26 @@ class AutoloadGeneratorTest extends TestCase
         $this->ensureDirectoryExistsAndClear($this->vendorDir);
 
         $this->config = $this->getMock('Composer\Config');
-        $this->config->expects($this->any())
+
+        $this->config->expects($this->at(0))
             ->method('get')
             ->with($this->equalTo('vendor-dir'))
             ->will($this->returnCallback(function () use ($that) {
                 return $that->vendorDir;
             }));
 
+        $this->config->expects($this->at(1))
+            ->method('get')
+            ->with($this->equalTo('vendor-dir'))
+            ->will($this->returnCallback(function () use ($that) {
+                return $that->vendorDir;
+            }));
+
+        $this->config->expects($this->at(2))
+            ->method('get')
+            ->with($this->equalTo('use-include-path'))
+            ->will($this->returnValue(false));
+
         $this->dir = getcwd();
         chdir($this->workingDir);