/** * Returns the modules selected in the console arguments. * * @param Args $args The console arguments * @param ModuleList $modules The available modules * * @return string[] The module names */ public static function getModuleNames(Args $args, ModuleList $modules) { // Display all modules if "all" is set if ($args->isOptionSet('all')) { return $modules->getModuleNames(); } $moduleNames = array(); if ($args->isOptionSet('root')) { $moduleNames[] = $modules->getRootModuleName(); } foreach ($args->getOption('module') as $moduleName) { $moduleNames[] = $moduleName; } return $moduleNames ?: $modules->getModuleNames(); }
/** * Creates an override graph for the given modules. * * @param ModuleList $modules The modules to load. * * @return static The created override graph. */ public static function forModules(ModuleList $modules) { $graph = new static($modules->getModuleNames()); foreach ($modules as $module) { if (null === $module->getModuleFile()) { continue; } foreach ($module->getModuleFile()->getDependencies() as $dependency) { if ($graph->hasModuleName($dependency)) { $graph->addDependency($module->getName(), $dependency); } } } // Do we have a root module? if (null === $modules->getRootModule()) { return $graph; } // Make sure we have numeric, ascending keys here $moduleOrder = array_values($modules->getRootModule()->getModuleFile()->getModuleOrder()); // Each module overrides the previous one in the list for ($i = 1, $l = count($moduleOrder); $i < $l; ++$i) { $dependency = $moduleOrder[$i - 1]; $moduleName = $moduleOrder[$i]; if ($graph->hasModuleName($dependency)) { $graph->addDependency($moduleName, $dependency); } } return $graph; }