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);
 }