Since: 1.0
Author: Bernhard Schussek (bschussek@gmail.com)
Inheritance: implements IteratorAggregat\IteratorAggregate, implements Countabl\Countable, implements ArrayAcces\ArrayAccess
示例#1
0
文件: ArgsUtil.php 项目: puli/cli
 /**
  * Returns the non-root 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 getModuleNamesWithoutRoot(Args $args, ModuleList $modules)
 {
     // Display all modules if "all" is set
     if ($args->isOptionSet('all')) {
         return $modules->getInstalledModuleNames();
     }
     $moduleNames = array();
     foreach ($args->getOption('module') as $moduleName) {
         $moduleNames[] = $moduleName;
     }
     return $moduleNames ?: $modules->getInstalledModuleNames();
 }
示例#2
0
 /**
  * Handles the "bind --delete" command.
  *
  * @param Args $args The console arguments
  *
  * @return int The status code
  */
 public function handleDelete(Args $args)
 {
     $bindingToRemove = $this->getBindingByUuidPrefix($args->getArgument('uuid'));
     if (!$bindingToRemove->getContainingModule() instanceof RootModule) {
         throw new RuntimeException(sprintf('Can only delete bindings from the module "%s".', $this->modules->getRootModuleName()));
     }
     $this->discoveryManager->removeRootBindingDescriptor($bindingToRemove->getUuid());
     return 0;
 }
示例#3
0
 /**
  * Handles the "puli map --delete" command.
  *
  * @param Args $args The console arguments
  *
  * @return int The status code
  */
 public function handleDelete(Args $args)
 {
     $repositoryPath = Path::makeAbsolute($args->getArgument('path'), $this->currentPath);
     if (!$this->repoManager->hasRootPathMapping($repositoryPath)) {
         throw new RuntimeException(sprintf('The path "%s" is not mapped in the module "%s".', $repositoryPath, $this->modules->getRootModuleName()));
     }
     $this->repoManager->removeRootPathMapping($repositoryPath);
     return 0;
 }
示例#4
0
 /**
  * Handles the "puli type --delete" command.
  *
  * @param Args $args The console arguments
  *
  * @return int The status code
  */
 public function handleDelete(Args $args)
 {
     $typeName = $args->getArgument('name');
     if (!$this->discoveryManager->hasRootTypeDescriptor($typeName)) {
         throw new RuntimeException(sprintf('The type "%s" does not exist in the module "%s".', $typeName, $this->modules->getRootModuleName()));
     }
     $this->discoveryManager->removeRootTypeDescriptor($typeName);
     return 0;
 }
示例#5
0
 private function renameNonRootModule(Module $module, $newName)
 {
     $previousInstallInfo = $module->getInstallInfo();
     $installInfo = new InstallInfo($newName, $previousInstallInfo->getInstallPath());
     $installInfo->setInstallerName($previousInstallInfo->getInstallerName());
     foreach ($previousInstallInfo->getDisabledBindingUuids() as $uuid) {
         $installInfo->addDisabledBindingUuid($uuid);
     }
     $this->rootModuleFile->removeInstallInfo($module->getName());
     $this->rootModuleFile->addInstallInfo($installInfo);
     try {
         $this->jsonStorage->saveRootModuleFile($this->rootModuleFile);
     } catch (Exception $e) {
         $this->rootModuleFile->removeInstallInfo($newName);
         $this->rootModuleFile->addInstallInfo($previousInstallInfo);
         throw $e;
     }
     $this->modules->remove($module->getName());
     $this->modules->add(new Module($module->getModuleFile(), $module->getInstallPath(), $installInfo, $module->getLoadErrors()));
 }
示例#6
0
 /**
  * Creates a tag manager.
  *
  * @param ProjectContext       $context
  * @param EditableDiscovery    $discovery
  * @param ModuleList           $modules
  * @param JsonStorage          $jsonStorage
  * @param LoggerInterface|null $logger
  */
 public function __construct(ProjectContext $context, EditableDiscovery $discovery, ModuleList $modules, JsonStorage $jsonStorage, LoggerInterface $logger = null)
 {
     $this->context = $context;
     $this->discovery = $discovery;
     $this->modules = $modules;
     $this->jsonStorage = $jsonStorage;
     $this->rootModule = $modules->getRootModule();
     $this->rootModuleFile = $context->getRootModuleFile();
     $this->logger = $logger ?: new NullLogger();
 }
 public function __construct(RootModuleFileManager $rootModuleFileManager, ModuleList $modules)
 {
     $this->rootModuleFileManager = $rootModuleFileManager;
     $this->modules = $modules;
     $this->rootModule = $modules->getRootModule();
 }
示例#8
0
 /**
  * Creates a repository manager.
  *
  * @param ProjectContext     $context
  * @param EditableRepository $repo
  * @param ModuleList         $modules
  * @param JsonStorage        $jsonStorage
  */
 public function __construct(ProjectContext $context, EditableRepository $repo, ModuleList $modules, JsonStorage $jsonStorage)
 {
     $this->context = $context;
     $this->dispatcher = $context->getEventDispatcher();
     $this->repo = $repo;
     $this->config = $context->getConfig();
     $this->rootDir = $context->getRootDirectory();
     $this->rootModule = $modules->getRootModule();
     $this->rootModuleFile = $context->getRootModuleFile();
     $this->modules = $modules;
     $this->jsonStorage = $jsonStorage;
 }
示例#9
0
 /**
  * Prints modules with intermediate headers for the module states.
  *
  * @param IO         $io      The I/O
  * @param ModuleList $modules The modules to print
  * @param int[]      $states  The states to print
  */
 private function printModulesByState(IO $io, ModuleList $modules, array $states)
 {
     $printStates = count($states) > 1;
     foreach ($states as $state) {
         $filteredModules = array_filter($modules->toArray(), function (Module $module) use($state) {
             return $state === $module->getState();
         });
         if (0 === count($filteredModules)) {
             continue;
         }
         if ($printStates) {
             $this->printModuleState($io, $state);
         }
         if (ModuleState::NOT_LOADABLE === $state) {
             $this->printNotLoadableModules($io, $filteredModules, $printStates);
         } else {
             $styleTag = ModuleState::ENABLED === $state ? null : 'bad';
             $this->printModuleTable($io, $filteredModules, $styleTag, $printStates);
         }
         if ($printStates) {
             $io->writeLine('');
         }
     }
 }
示例#10
0
 /**
  * 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;
 }
示例#11
0
 private function makeAbsolute($relativePath, Module $containingModule, ModuleList $modules)
 {
     // Reference to install path of other module
     if ('@' !== $relativePath[0] || false === ($pos = strpos($relativePath, ':'))) {
         return $containingModule->getInstallPath() . '/' . $relativePath;
     }
     $refModuleName = substr($relativePath, 1, $pos - 1);
     if (!$modules->contains($refModuleName)) {
         throw new NoSuchModuleException(sprintf('The module "%s" referenced in the resource path "%s" was not ' . 'found. Maybe the module is not installed?', $refModuleName, $relativePath));
     }
     $refModule = $modules->get($refModuleName);
     return $refModule->getInstallPath() . '/' . substr($relativePath, $pos + 1);
 }