protected function execute(InputInterface $input, OutputInterface $output) { /** @var HelperSet $helperSet */ $helperSet = $this->getHelperSet(); if (!$this->environment) { $this->environment = new Environment(); } if (!$this->environment->hasApplication()) { $this->environment->setApplication($this->getApplication()); } if (!$this->environment->hasConfiguration()) { if ($helperSet->has('ccabs:repositories:configuration')) { /** @var ConfigurationHelperInterface $helper */ $helper = $helperSet->get('ccabs:repositories:configuration'); $this->environment->setConfiguration($helper->getConfiguration($this->environment)); } else { throw new \RuntimeException('Configuration is not provided'); } } // TODO use a helper to get this instance if (!$this->environment->hasPlaceholderReplacer()) { $this->environment->setPlaceholderReplacer(new PlaceholderReplacer()); } $this->environment->setInput($input); $this->environment->setOutput($output); if ($output instanceof ConsoleOutputInterface) { $this->environment->setErrorOutput($output->getErrorOutput()); } else { $this->environment->setErrorOutput($output); } if ($input->hasOption('log') && $input->hasParameterOption('log')) { $logFile = $input->getOption('log'); $logLevel = $input->getOption('log-level'); $logger = new Logger('ccabs:repositories', array(new StreamHandler($logFile, $logLevel))); $this->environment->setLogger($logger); } $ownerName = $input->getOption('owner'); $repositoryName = $input->getOption('repository'); $providers = (array) $input->getOption('provider'); if (count($providers)) { $compoundProvider = new CompoundProvider($this->environment); foreach ($this->environment->getConfiguration()->getProvider()->getProviders() as $provider) { if (in_array($provider->getName(), $providers)) { $compoundProvider->addProvider($provider); } } $repositories = $compoundProvider->listAll(); } else { $repositories = $this->environment->getConfiguration()->getProvider()->listAll(); } if ($ownerName || $repositoryName) { $repositories = array_filter($repositories, function (Repository $repository) use($ownerName, $repositoryName) { return (!$ownerName || fnmatch($ownerName, $repository->getOwner())) && (!$repositoryName || fnmatch($repositoryName, $repository->getName())); }); } $this->executeOn($repositories, $input, $output); }