diff --git a/PHPCI/Command/RebuildQueueCommand.php b/PHPCI/Command/RebuildQueueCommand.php new file mode 100644 index 00000000..4b0af6d8 --- /dev/null +++ b/PHPCI/Command/RebuildQueueCommand.php @@ -0,0 +1,85 @@ + +* @package PHPCI +* @subpackage Console +*/ +class RebuildQueueCommand extends Command +{ + /** + * @var OutputInterface + */ + protected $output; + + /** + * @var Logger + */ + protected $logger; + + /** + * @param \Monolog\Logger $logger + * @param string $name + */ + public function __construct(Logger $logger, $name = null) + { + parent::__construct($name); + $this->logger = $logger; + } + + protected function configure() + { + $this + ->setName('phpci:rebuild-queue') + ->setDescription('Rebuilds the PHPCI worker queue.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->output = $output; + + // For verbose mode we want to output all informational and above + // messages to the symphony output interface. + if ($input->hasOption('verbose') && $input->getOption('verbose')) { + $this->logger->pushHandler( + new OutputLogHandler($this->output, Logger::INFO) + ); + } + + $store = Factory::getStore('Build'); + $result = $store->getByStatus(0); + + $this->logger->addInfo(Lang::get('found_n_builds', count($result['items']))); + + $buildService = new BuildService($store); + + while (count($result['items'])) { + $build = array_shift($result['items']); + $build = BuildFactory::getBuild($build); + + $this->logger->addInfo('Added build #' . $build->getId() . ' to queue.'); + $buildService->addBuildToQueue($build); + } + } +} diff --git a/console b/console index 412dbbdb..992462e5 100755 --- a/console +++ b/console @@ -22,6 +22,7 @@ use PHPCI\Command\PollCommand; use PHPCI\Command\CreateAdminCommand; use PHPCI\Command\CreateBuildCommand; use PHPCI\Command\WorkerCommand; +use PHPCI\Command\RebuildQueueCommand; use PHPCI\Service\BuildService; use Symfony\Component\Console\Application; use b8\Store\Factory; @@ -38,5 +39,6 @@ $application->add(new PollCommand($loggerConfig->getFor('PollCommand'))); $application->add(new CreateAdminCommand(Factory::getStore('User'))); $application->add(new CreateBuildCommand(Factory::getStore('Project'), new BuildService(Factory::getStore('Build')))); $application->add(new WorkerCommand($loggerConfig->getFor('WorkerCommand'))); +$application->add(new RebuildQueueCommand($loggerConfig->getFor('RebuildQueueCommand'))); $application->run();