|
@@ -178,18 +178,13 @@ EOF;
|
|
|
public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages)
|
|
|
{
|
|
|
// build package => install path map
|
|
|
- $packageMap = array();
|
|
|
- array_unshift($packages, $mainPackage);
|
|
|
+ $packageMap = array(array($mainPackage, ''));
|
|
|
|
|
|
foreach ($packages as $package) {
|
|
|
if ($package instanceof AliasPackage) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if ($package === $mainPackage) {
|
|
|
- $packageMap[] = array($mainPackage, '');
|
|
|
- continue;
|
|
|
- }
|
|
|
$packageMap[] = array(
|
|
|
$package,
|
|
|
$installationManager->getInstallPath($package)
|
|
@@ -208,7 +203,10 @@ EOF;
|
|
|
*/
|
|
|
public function parseAutoloads(array $packageMap, PackageInterface $mainPackage)
|
|
|
{
|
|
|
+ $mainPackageMap = array_shift($packageMap);
|
|
|
$sortedPackageMap = $this->sortPackageMap($packageMap);
|
|
|
+ $sortedPackageMap[] = $mainPackageMap;
|
|
|
+ array_unshift($packageMap, $mainPackageMap);
|
|
|
|
|
|
$psr0 = $this->parseAutoloadsType($packageMap, 'psr-0', $mainPackage);
|
|
|
$classmap = $this->parseAutoloadsType($sortedPackageMap, 'classmap', $mainPackage);
|
|
@@ -359,12 +357,12 @@ class ComposerAutoloaderInit$suffix
|
|
|
|
|
|
public static function getLoader()
|
|
|
{
|
|
|
- if (null !== static::\$loader) {
|
|
|
- return static::\$loader;
|
|
|
+ if (null !== self::\$loader) {
|
|
|
+ return self::\$loader;
|
|
|
}
|
|
|
|
|
|
spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
|
|
|
- static::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
|
|
|
+ self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
|
|
|
spl_autoload_unregister(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
|
|
|
|
|
|
\$vendorDir = $vendorPathCode;
|
|
@@ -434,6 +432,7 @@ FOOTER;
|
|
|
protected function parseAutoloadsType(array $packageMap, $type, PackageInterface $mainPackage)
|
|
|
{
|
|
|
$autoloads = array();
|
|
|
+
|
|
|
foreach ($packageMap as $item) {
|
|
|
list($package, $installPath) = $item;
|
|
|
|
|
@@ -465,49 +464,45 @@ FOOTER;
|
|
|
|
|
|
protected function sortPackageMap(array $packageMap)
|
|
|
{
|
|
|
- $groups = array();
|
|
|
+ $positions = array();
|
|
|
$names = array();
|
|
|
- foreach ($packageMap as $key => $item) {
|
|
|
- $groups[$key] = array($item);
|
|
|
+ $indexes = array();
|
|
|
+
|
|
|
+ foreach ($packageMap as $position => $item) {
|
|
|
$mainName = $item[0]->getName();
|
|
|
- foreach ($item[0]->getNames() as $name) {
|
|
|
- if (!isset($names[$name])) {
|
|
|
- $names[$name] = $name == $mainName ? $key : $mainName;
|
|
|
- }
|
|
|
- }
|
|
|
+ $names = array_merge(array_fill_keys($item[0]->getNames(), $mainName), $names);
|
|
|
+ $names[$mainName] = $mainName;
|
|
|
+ $indexes[$mainName] = $positions[$mainName] = $position;
|
|
|
}
|
|
|
|
|
|
foreach ($packageMap as $item) {
|
|
|
+ $position = $positions[$item[0]->getName()];
|
|
|
foreach (array_merge($item[0]->getRequires(), $item[0]->getDevRequires()) as $link) {
|
|
|
$target = $link->getTarget();
|
|
|
if (!isset($names[$target])) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- $targetKey = $names[$target];
|
|
|
- if (is_string($targetKey)) {
|
|
|
- if (!isset($names[$targetKey])) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- $targetKey = $names[$targetKey];
|
|
|
- }
|
|
|
-
|
|
|
- $packageKey = $names[$item[0]->getName()];
|
|
|
- if ($targetKey <= $packageKey || !isset($groups[$packageKey])) {
|
|
|
+ $target = $names[$target];
|
|
|
+ if ($positions[$target] <= $position) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- foreach ($groups[$packageKey] as $originalItem) {
|
|
|
- $groups[$targetKey][] = $originalItem;
|
|
|
- $names[$originalItem[0]->getName()] = $targetKey;
|
|
|
+ foreach ($positions as $key => $value) {
|
|
|
+ if ($value >= $position) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ $positions[$key]--;
|
|
|
}
|
|
|
- unset($groups[$packageKey]);
|
|
|
+
|
|
|
+ $positions[$target] = $position - 1;
|
|
|
}
|
|
|
+ asort($positions);
|
|
|
}
|
|
|
|
|
|
$sortedPackageMap = array();
|
|
|
- foreach ($groups as $group) {
|
|
|
- $sortedPackageMap = array_merge($sortedPackageMap, $group);
|
|
|
+ foreach (array_keys($positions) as $packageName) {
|
|
|
+ $sortedPackageMap[] = $packageMap[$indexes[$packageName]];
|
|
|
}
|
|
|
|
|
|
return $sortedPackageMap;
|