Handle absolute phar:// paths in autoload_static.php
parent
dd40d74bf6
commit
a2b647a99e
|
@ -545,7 +545,7 @@ EOF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('/\.phar.+$/', $path)) {
|
if (strpos($path, '.phar') !== false) {
|
||||||
$baseDir = "'phar://' . " . $baseDir;
|
$baseDir = "'phar://' . " . $baseDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -769,10 +769,14 @@ HEADER;
|
||||||
$filesystem = new Filesystem();
|
$filesystem = new Filesystem();
|
||||||
|
|
||||||
$vendorPathCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
|
$vendorPathCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
|
||||||
|
$vendorPharPathCode = ' => \'phar://\' . ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
|
||||||
$appBaseDirCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
|
$appBaseDirCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
|
||||||
|
$appBaseDirPharCode = ' => \'phar://\' . ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
|
||||||
|
|
||||||
$absoluteVendorPathCode = ' => ' . substr(var_export(rtrim($vendorDir, '\\/') . '/', true), 0, -1);
|
$absoluteVendorPathCode = ' => ' . substr(var_export(rtrim($vendorDir, '\\/') . '/', true), 0, -1);
|
||||||
|
$absoluteVendorPharPathCode = ' => ' . substr(var_export(rtrim('phar://' . $vendorDir, '\\/') . '/', true), 0, -1);
|
||||||
$absoluteAppBaseDirCode = ' => ' . substr(var_export(rtrim($baseDir, '\\/') . '/', true), 0, -1);
|
$absoluteAppBaseDirCode = ' => ' . substr(var_export(rtrim($baseDir, '\\/') . '/', true), 0, -1);
|
||||||
|
$absoluteAppBaseDirPharCode = ' => ' . substr(var_export(rtrim('phar://' . $baseDir, '\\/') . '/', true), 0, -1);
|
||||||
|
|
||||||
$initializer = '';
|
$initializer = '';
|
||||||
$prefix = "\0Composer\Autoload\ClassLoader\0";
|
$prefix = "\0Composer\Autoload\ClassLoader\0";
|
||||||
|
@ -795,9 +799,15 @@ HEADER;
|
||||||
// See https://bugs.php.net/68057
|
// See https://bugs.php.net/68057
|
||||||
$staticPhpVersion = 70000;
|
$staticPhpVersion = 70000;
|
||||||
}
|
}
|
||||||
$value = var_export($value, true);
|
$value = strtr(
|
||||||
$value = str_replace($absoluteVendorPathCode, $vendorPathCode, $value);
|
var_export($value, true),
|
||||||
$value = str_replace($absoluteAppBaseDirCode, $appBaseDirCode, $value);
|
array(
|
||||||
|
$absoluteVendorPathCode => $vendorPathCode,
|
||||||
|
$absoluteVendorPharPathCode => $vendorPharPathCode,
|
||||||
|
$absoluteAppBaseDirCode => $appBaseDirCode,
|
||||||
|
$absoluteAppBaseDirPharCode => $appBaseDirPharCode,
|
||||||
|
)
|
||||||
|
);
|
||||||
$value = ltrim(preg_replace('/^ */m', ' $0$0', $value));
|
$value = ltrim(preg_replace('/^ */m', ' $0$0', $value));
|
||||||
|
|
||||||
$file .= sprintf(" public static $%s = %s;\n\n", $prop, $value);
|
$file .= sprintf(" public static $%s = %s;\n\n", $prop, $value);
|
||||||
|
|
|
@ -486,6 +486,47 @@ class AutoloadGeneratorTest extends TestCase
|
||||||
$this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated, even if empty.");
|
$this->assertFileExists($this->vendorDir.'/composer/autoload_classmap.php', "ClassMap file needs to be generated, even if empty.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPharAutoload()
|
||||||
|
{
|
||||||
|
$package = new Package('a', '1.0', '1.0');
|
||||||
|
$package->setRequires(array(
|
||||||
|
new Link('a', 'a/a'),
|
||||||
|
));
|
||||||
|
|
||||||
|
$package->setAutoload(array(
|
||||||
|
'psr-0' => array(
|
||||||
|
'Foo' => 'foo.phar',
|
||||||
|
'Bar' => 'dir/bar.phar/src',
|
||||||
|
),
|
||||||
|
'psr-4' => array(
|
||||||
|
'Baz\\' => 'baz.phar',
|
||||||
|
'Qux\\' => 'dir/qux.phar/src',
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
$vendorPackage = new Package('a/a', '1.0', '1.0');
|
||||||
|
$vendorPackage->setAutoload(array(
|
||||||
|
'psr-0' => array(
|
||||||
|
'Lorem' => 'lorem.phar',
|
||||||
|
'Ipsum' => 'dir/ipsum.phar/src',
|
||||||
|
),
|
||||||
|
'psr-4' => array(
|
||||||
|
'Dolor\\' => 'dolor.phar',
|
||||||
|
'Sit\\' => 'dir/sit.phar/src',
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->repository->expects($this->once())
|
||||||
|
->method('getCanonicalPackages')
|
||||||
|
->will($this->returnValue(array($vendorPackage)));
|
||||||
|
|
||||||
|
$this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, 'Phar');
|
||||||
|
|
||||||
|
$this->assertAutoloadFiles('phar', $this->vendorDir . '/composer');
|
||||||
|
$this->assertAutoloadFiles('phar_psr4', $this->vendorDir . '/composer', 'psr4');
|
||||||
|
$this->assertAutoloadFiles('phar_static', $this->vendorDir . '/composer', 'static');
|
||||||
|
}
|
||||||
|
|
||||||
public function testPSRToClassMapIgnoresNonExistingDir()
|
public function testPSRToClassMapIgnoresNonExistingDir()
|
||||||
{
|
{
|
||||||
$package = new Package('a', '1.0', '1.0');
|
$package = new Package('a', '1.0', '1.0');
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_namespaces.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'Lorem' => array('phar://' . $vendorDir . '/a/a/lorem.phar'),
|
||||||
|
'Ipsum' => array('phar://' . $vendorDir . '/a/a/dir/ipsum.phar/src'),
|
||||||
|
'Foo' => array('phar://' . $baseDir . '/foo.phar'),
|
||||||
|
'Bar' => array('phar://' . $baseDir . '/dir/bar.phar/src'),
|
||||||
|
);
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_psr4.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'Sit\\' => array('phar://' . $vendorDir . '/a/a/dir/sit.phar/src'),
|
||||||
|
'Qux\\' => array('phar://' . $baseDir . '/dir/qux.phar/src'),
|
||||||
|
'Dolor\\' => array('phar://' . $vendorDir . '/a/a/dolor.phar'),
|
||||||
|
'Baz\\' => array('phar://' . $baseDir . '/baz.phar'),
|
||||||
|
);
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_static.php @generated by Composer
|
||||||
|
|
||||||
|
namespace Composer\Autoload;
|
||||||
|
|
||||||
|
class ComposerStaticInitPhar
|
||||||
|
{
|
||||||
|
public static $prefixLengthsPsr4 = array (
|
||||||
|
'S' =>
|
||||||
|
array (
|
||||||
|
'Sit\\' => 4,
|
||||||
|
),
|
||||||
|
'Q' =>
|
||||||
|
array (
|
||||||
|
'Qux\\' => 4,
|
||||||
|
),
|
||||||
|
'D' =>
|
||||||
|
array (
|
||||||
|
'Dolor\\' => 6,
|
||||||
|
),
|
||||||
|
'B' =>
|
||||||
|
array (
|
||||||
|
'Baz\\' => 4,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $prefixDirsPsr4 = array (
|
||||||
|
'Sit\\' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/..' . '/a/a/dir/sit.phar/src',
|
||||||
|
),
|
||||||
|
'Qux\\' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/../..' . '/dir/qux.phar/src',
|
||||||
|
),
|
||||||
|
'Dolor\\' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/..' . '/a/a/dolor.phar',
|
||||||
|
),
|
||||||
|
'Baz\\' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/../..' . '/baz.phar',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $prefixesPsr0 = array (
|
||||||
|
'L' =>
|
||||||
|
array (
|
||||||
|
'Lorem' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/..' . '/a/a/lorem.phar',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'I' =>
|
||||||
|
array (
|
||||||
|
'Ipsum' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/..' . '/a/a/dir/ipsum.phar/src',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'F' =>
|
||||||
|
array (
|
||||||
|
'Foo' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/../..' . '/foo.phar',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'B' =>
|
||||||
|
array (
|
||||||
|
'Bar' =>
|
||||||
|
array (
|
||||||
|
0 => 'phar://' . __DIR__ . '/../..' . '/dir/bar.phar/src',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
public static function getInitializer(ClassLoader $loader)
|
||||||
|
{
|
||||||
|
return \Closure::bind(function () use ($loader) {
|
||||||
|
$loader->prefixLengthsPsr4 = ComposerStaticInitPhar::$prefixLengthsPsr4;
|
||||||
|
$loader->prefixDirsPsr4 = ComposerStaticInitPhar::$prefixDirsPsr4;
|
||||||
|
$loader->prefixesPsr0 = ComposerStaticInitPhar::$prefixesPsr0;
|
||||||
|
|
||||||
|
}, null, ClassLoader::class);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue