private function resolvePackageDependencies($repository, $packages, $packageName) { $config = $packages[$packageName]; foreach ($config['deps'] as $dependencyName) { if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) { continue; } if (!isset($packages[$dependencyName])) { throw new \RuntimeException("Requiring non existant package '" . $dependencyName . "' in '" . $packageName . "'."); } $dependency = $packages[$dependencyName]; $package = new Package($dependency['path'], "@stable", "@stable"); $package->setType('fiddler'); if (isset($dependency['autoload']) && is_array($dependency['autoload'])) { $package->setAutoload($dependency['autoload']); } if (isset($dependency['bin']) && is_array($dependency['bin'])) { $package->setBinaries($dependency['bin']); } if (!$repository->hasPackage($package)) { $repository->addPackage($package); $this->resolvePackageDependencies($repository, $packages, $dependencyName); } } }
private function resolvePackageDependencies($repository, $packages, $packageName) { $config = $packages[$packageName]; $dependencies = $config['deps']; if (isset($config['deps-dev'])) { $dependencies = array_merge($dependencies, $config['deps-dev']); } foreach ($dependencies as $dependencyName) { $isVendor = strpos($dependencyName, 'vendor/') === 0; if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) { continue; // Meta-dependencies that composer checks } if (!isset($packages[$dependencyName])) { if ($dependencyName == 'vendor/composer-plugin-api') { continue; } if ($isVendor) { throw new \RuntimeException("Requiring non-existent composer-package '" . $dependencyName . "' in '" . $packageName . "'. Please ensure it is present in composer.json."); } else { throw new \RuntimeException("Requiring non-existent repo-module '" . $dependencyName . "' in '" . $packageName . "'. Please check that the subdirectory exists, or append \"vendor/\" to reference a composer-package."); } } $dependency = $packages[$dependencyName]; $package = new Package($dependency['path'], "@stable", "@stable"); $package->setType('monorepo'); if (isset($dependency['autoload']) && is_array($dependency['autoload'])) { $package->setAutoload($dependency['autoload']); } if (isset($dependency['bin']) && is_array($dependency['bin'])) { $package->setBinaries($dependency['bin']); } if (!$repository->hasPackage($package)) { $repository->addPackage($package); $this->resolvePackageDependencies($repository, $packages, $dependencyName); } } }
/** * @param string $newName * @param array $package * @return Package */ protected static function bindPackageValues($newName, array $package) { $new = new Package($newName, $package['version'], $package['version']); $new->setType('dist'); if (isset($package['bin'])) { $new->setBinaries($package['bin']); } if (isset($package['dist']['type'])) { $new->setDistType($package['dist']['type']); } if (isset($package['dist']['url'])) { $new->setDistUrl($package['dist']['url']); } if (isset($package['excludes'])) { $new->setArchiveExcludes($package['excludes']); } return $new; }