/** * Returns the packages selected in the console arguments. * * @param Args $args The console arguments. * @param PackageCollection $packages The available packages. * * @return string[] The package names. */ public static function getPackageNames(Args $args, PackageCollection $packages) { // Display all packages if "all" is set if ($args->isOptionSet('all')) { return $packages->getPackageNames(); } $packageNames = array(); if ($args->isOptionSet('root')) { $packageNames[] = $packages->getRootPackage()->getName(); } foreach ($args->getOption('package') as $packageName) { $packageNames[] = $packageName; } return $packageNames ?: $packages->getPackageNames(); }
/** * Creates an override graph for the given packages. * * @param PackageCollection $packages The packages to load. * * @return static The created override graph. */ public static function forPackages(PackageCollection $packages) { $graph = new static($packages->getPackageNames()); foreach ($packages as $package) { foreach ($package->getPackageFile()->getOverriddenPackages() as $overriddenPackage) { if ($graph->hasPackageName($overriddenPackage)) { $graph->addEdge($overriddenPackage, $package->getName()); } } } // Make sure we have numeric, ascending keys here $packageOrder = array_values($packages->getRootPackage()->getPackageFile()->getOverrideOrder()); // Each package overrides the previous one in the list for ($i = 1, $l = count($packageOrder); $i < $l; ++$i) { $overriddenPackage = $packageOrder[$i - 1]; $overridingPackage = $packageOrder[$i]; if ($graph->hasPackageName($overriddenPackage)) { $graph->addEdge($overriddenPackage, $overridingPackage); } } return $graph; }