From 06204ef17138e8188203b15a17bfd9f738aae025 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 12:13:22 +0100 Subject: [PATCH 1/6] Adding support for beanstalkd-based workers. --- PHPCI/Command/WorkerCommand.php | 80 +++ PHPCI/Controller/WebhookController.php | 4 - PHPCI/Model/Build.php | 2 +- PHPCI/Service/BuildService.php | 39 +- PHPCI/Worker/BuildWorker.php | 160 ++++++ bootstrap.php | 3 + composer.json | 3 +- composer.lock | 761 ++++++++++++++----------- console | 2 + 9 files changed, 701 insertions(+), 353 deletions(-) create mode 100644 PHPCI/Command/WorkerCommand.php create mode 100644 PHPCI/Worker/BuildWorker.php diff --git a/PHPCI/Command/WorkerCommand.php b/PHPCI/Command/WorkerCommand.php new file mode 100644 index 00000000..49685656 --- /dev/null +++ b/PHPCI/Command/WorkerCommand.php @@ -0,0 +1,80 @@ + +* @package PHPCI +* @subpackage Console +*/ +class WorkerCommand 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:worker') + ->setDescription('Runs the PHPCI build worker.'); + } + + 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) + ); + } + + $config = Config::getInstance()->get('phpci.worker', []); + + if (empty($config['host']) || empty($config['queue'])) { + $error = 'The worker is not configured. You must set a host and queue in your config.yml file.'; + throw new \Exception($error); + } + + $worker = new BuildWorker($config['host'], $config['queue']); + $worker->setLogger($this->logger); + $worker->setMaxJobs(Config::getInstance()->get('phpci.worker.max_jobs', -1)); + $worker->startWorker(); + } +} diff --git a/PHPCI/Controller/WebhookController.php b/PHPCI/Controller/WebhookController.php index 45a775ad..f9a764ca 100644 --- a/PHPCI/Controller/WebhookController.php +++ b/PHPCI/Controller/WebhookController.php @@ -364,10 +364,6 @@ class WebhookController extends \b8\Controller // If not, create a new build job for it: $build = $this->buildService->createBuild($project, $commitId, $branch, $committer, $commitMessage, $extra); - $build = BuildFactory::getBuild($build); - - // Send a status postback if the build type provides one: - $build->sendStatusPostback(); return array('status' => 'ok', 'buildID' => $build->getID()); } diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php index a0019438..192acea6 100644 --- a/PHPCI/Model/Build.php +++ b/PHPCI/Model/Build.php @@ -228,7 +228,7 @@ class Build extends BuildBase if (!$this->getId()) { return null; } - return PHPCI_BUILD_ROOT_DIR . $this->getId(); + return PHPCI_BUILD_ROOT_DIR . $this->getId() . '_' . substr(md5(microtime(true)), 0, 5); } /** diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index ca2fae4d..ed1ed6c3 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -9,6 +9,10 @@ namespace PHPCI\Service; +use b8\Config; +use Pheanstalk\Pheanstalk; +use Pheanstalk\PheanstalkInterface; +use PHPCI\BuildFactory; use PHPCI\Helper\Lang; use PHPCI\Model\Build; use PHPCI\Model\Project; @@ -81,7 +85,13 @@ class BuildService $build->setExtra(json_encode($extra)); } - return $this->buildStore->save($build); + $build = $this->buildStore->save($build); + + $build = BuildFactory::getBuild($build); + $build->sendStatusPostback(); + $this->addBuildToQueue($build); + + return $build; } /** @@ -117,4 +127,31 @@ class BuildService $build->removeBuildDirectory(); return $this->buildStore->delete($build); } + + + public function addBuildToQueue(Build $build) + { + $config = Config::getInstance(); + + $settings = $config->get('phpci.worker', []); + + if (!empty($settings['host']) && !empty($settings['queue'])) { + $jobData = array( + 'build_id' => $build->getId(), + ); + + if ($config->get('using_custom_file')) { + $jobData['config'] = $config->getArray(); + } + + $pheanstalk = new Pheanstalk($settings['host']); + $pheanstalk->useTube($settings['queue']); + $pheanstalk->put( + json_encode($jobData), + PheanstalkInterface::DEFAULT_PRIORITY, + PheanstalkInterface::DEFAULT_DELAY, + $config->get('phpci.worker.job_timeout', 600) + ); + } + } } diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php new file mode 100644 index 00000000..9d13ffdd --- /dev/null +++ b/PHPCI/Worker/BuildWorker.php @@ -0,0 +1,160 @@ +host = $host; + $this->queue = $queue; + } + + /** + * @param int $maxJobs + */ + public function setMaxJobs($maxJobs = -1) + { + $this->maxJobs = $maxJobs; + } + + /** + * @param Logger $logger + */ + public function setLogger(Logger $logger) + { + $this->logger = $logger; + } + + /** + * Start the worker. + */ + public function startWorker() + { + $pheanstalk = new Pheanstalk($this->host); + $pheanstalk->watch($this->queue); + $buildStore = Factory::getStore('Build'); + + $jobs = 0; + + while ($this->run) { + // Get a job from the queue: + $job = $pheanstalk->reserve(); + + // Make sure we don't run more than maxJobs jobs on this worker: + $jobs++; + + if ($this->maxJobs != -1 && $this->maxJobs <= $jobs) { + $this->run = false; + } + + // Get the job data and run the job: + $jobData = json_decode($job->getData(), true); + $this->logger->addInfo('Received build #'.$jobData['build_id'].' from Beanstalkd'); + + // If the job comes with config data, reset our config and database connections + // and then make sure we kill the worker afterwards: + if (!empty($jobData['config'])) { + $this->logger->addDebug('Using job-specific config.'); + $currentConfig = Config::getInstance()->getArray(); + $config = new Config($jobData['config']); + Database::reset($config); + } + + $build = BuildFactory::getBuildById($jobData['build_id']); + + if (empty($build)) { + $this->logger->addWarning('Build #' . $jobData['build_id'] . ' does not exist in the database.'); + $pheanstalk->delete($job); + } + + try { + // Logging relevant to this build should be stored + // against the build itself. + $buildDbLog = new BuildDBLogHandler($build, Logger::INFO); + $this->logger->pushHandler($buildDbLog); + + $builder = new Builder($build, $this->logger); + $builder->execute(); + + // After execution we no longer want to record the information + // back to this specific build so the handler should be removed. + $this->logger->popHandler($buildDbLog); + } catch (\PDOException $ex) { + // If we've caught a PDO Exception, it is probably not the fault of the build, but of a failed + // connection or similar. Release the job and kill the worker. + $this->run = false; + $pheanstalk->release($job); + } catch (\Exception $ex) { + $build->setStatus(Build::STATUS_FAILED); + $build->setFinished(new \DateTime()); + $build->setLog($build->getLog() . PHP_EOL . PHP_EOL . $ex->getMessage()); + $buildStore->save($build); + $build->sendStatusPostback(); + } + + // Reset the config back to how it was prior to running this job: + if (!empty($currentConfig)) { + $config = new Config($currentConfig); + Database::reset($config); + } + + // Delete the job when we're done: + $pheanstalk->delete($job); + } + } + + /** + * Stops the worker after the current build. + */ + public function stopWorker() + { + $this->run = false; + } +} diff --git a/bootstrap.php b/bootstrap.php index 18d91d07..ef1fe197 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -17,9 +17,11 @@ if (empty($timezone)) { $configFile = dirname(__FILE__) . '/PHPCI/config.yml'; $configEnv = getenv('phpci_config_file'); +$usingCustomConfigFile = false; if (!empty($configEnv) && file_exists($configEnv)) { $configFile = $configEnv; + $usingCustomConfigFile = true; } // If we don't have a config file at all, fail at this point and tell the user to install: @@ -53,6 +55,7 @@ $conf = array(); $conf['b8']['app']['namespace'] = 'PHPCI'; $conf['b8']['app']['default_controller'] = 'Home'; $conf['b8']['view']['path'] = dirname(__FILE__) . '/PHPCI/View/'; +$conf['using_custom_file'] = $usingCustomConfigFile; $config = new b8\Config($conf); diff --git a/composer.json b/composer.json index e20a3b1b..fad44cd9 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "monolog/monolog": "~1.6", "pimple/pimple": "~1.1", "robmorgan/phinx": "~0.4", - "sensiolabs/ansi-to-html": "~1.1" + "sensiolabs/ansi-to-html": "~1.1", + "pda/pheanstalk": "~3.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 21e42d42..34626b27 100644 --- a/composer.lock +++ b/composer.lock @@ -1,23 +1,24 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "0be92d5565a805ffe462c6061ed1dcf4", + "hash": "22ff64c3aa3c951901e6332784ab617e", + "content-hash": "177ce296bc661eb8bff467cbd10a88e4", "packages": [ { "name": "block8/b8framework", - "version": "1.1.9", + "version": "1.1.10", "source": { "type": "git", "url": "https://github.com/Block8/b8framework.git", - "reference": "3952dabee84cbf5be3dd8d20eadd13b6219e7a6a" + "reference": "5d2d2863ce15a6b91e0b2aed4250dd29c6224446" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Block8/b8framework/zipball/3952dabee84cbf5be3dd8d20eadd13b6219e7a6a", - "reference": "3952dabee84cbf5be3dd8d20eadd13b6219e7a6a", + "url": "https://api.github.com/repos/Block8/b8framework/zipball/5d2d2863ce15a6b91e0b2aed4250dd29c6224446", + "reference": "5d2d2863ce15a6b91e0b2aed4250dd29c6224446", "shasum": "" }, "require": { @@ -51,7 +52,7 @@ "mvc", "php" ], - "time": "2014-12-01 21:02:58" + "time": "2015-10-05 10:50:20" }, { "name": "ircmaxell/password-compat", @@ -95,65 +96,18 @@ ], "time": "2014-11-20 16:49:30" }, - { - "name": "jakub-onderka/php-parallel-lint", - "version": "v0.8", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Parallel-Lint.git", - "reference": "2b242dcdbdd7369d2a746518ac31bb30c514b728" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Parallel-Lint/zipball/2b242dcdbdd7369d2a746518ac31bb30c514b728", - "reference": "2b242dcdbdd7369d2a746518ac31bb30c514b728", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "jakub-onderka/php-console-highlighter": "~0.3", - "nette/tester": "~1.3" - }, - "suggest": { - "jakub-onderka/php-console-highlighter": "Highlight syntax in code snippet" - }, - "bin": [ - "parallel-lint" - ], - "type": "library", - "autoload": { - "classmap": [ - "./" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint", - "time": "2014-10-05 10:19:39" - }, { "name": "monolog/monolog", - "version": "1.12.0", + "version": "1.17.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f" + "reference": "0524c87587ab85bc4c2d6f5b41253ccb930a5422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1fbe8c2641f2b163addf49cc5e18f144bec6b19f", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/0524c87587ab85bc4c2d6f5b41253ccb930a5422", + "reference": "0524c87587ab85bc4c2d6f5b41253ccb930a5422", "shasum": "" }, "require": { @@ -164,12 +118,15 @@ "psr/log-implementation": "1.0.0" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", + "aws/aws-sdk-php": "^2.4.9", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "raven/raven": "~0.11", + "ruflin/elastica": ">=0.90 <3.0", + "swiftmailer/swiftmailer": "~5.3", "videlalvaro/php-amqplib": "~2.4" }, "suggest": { @@ -178,6 +135,7 @@ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "php-console/php-console": "Allow sending log messages to Google Chrome", "raven/raven": "Allow sending log messages to a Sentry server", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", @@ -186,7 +144,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12.x-dev" + "dev-master": "1.16.x-dev" } }, "autoload": { @@ -212,19 +170,69 @@ "logging", "psr-3" ], - "time": "2014-12-29 21:29:35" + "time": "2015-08-31 09:17:37" + }, + { + "name": "pda/pheanstalk", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/pda/pheanstalk.git", + "reference": "430e77c551479aad0c6ada0450ee844cf656a18b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pda/pheanstalk/zipball/430e77c551479aad0c6ada0450ee844cf656a18b", + "reference": "430e77c551479aad0c6ada0450ee844cf656a18b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Pheanstalk\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Annesley", + "email": "paul@annesley.cc", + "homepage": "http://paul.annesley.cc/", + "role": "Developer" + } + ], + "description": "PHP client for beanstalkd queue", + "homepage": "https://github.com/pda/pheanstalk", + "keywords": [ + "beanstalkd" + ], + "time": "2015-08-07 21:42:41" }, { "name": "pimple/pimple", "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/fabpot/Pimple.git", + "url": "https://github.com/silexphp/Pimple.git", "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fabpot/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", "shasum": "" }, @@ -302,23 +310,23 @@ }, { "name": "robmorgan/phinx", - "version": "v0.4.3", + "version": "v0.4.6", "source": { "type": "git", "url": "https://github.com/robmorgan/phinx.git", - "reference": "0d1f9cb9939f65f506a8a3f5fee356764c310fd4" + "reference": "1351ca36dd2419d7de02afd1aaa415929112d7f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robmorgan/phinx/zipball/0d1f9cb9939f65f506a8a3f5fee356764c310fd4", - "reference": "0d1f9cb9939f65f506a8a3f5fee356764c310fd4", + "url": "https://api.github.com/repos/robmorgan/phinx/zipball/1351ca36dd2419d7de02afd1aaa415929112d7f1", + "reference": "1351ca36dd2419d7de02afd1aaa415929112d7f1", "shasum": "" }, "require": { "php": ">=5.3.2", - "symfony/config": "~2.6.0", - "symfony/console": "~2.6.0", - "symfony/yaml": "~2.6.0" + "symfony/config": "~2.7", + "symfony/console": "~2.7", + "symfony/yaml": "~2.7" }, "require-dev": { "phpunit/phpunit": "3.7.*", @@ -360,20 +368,20 @@ "migrations", "phinx" ], - "time": "2015-02-23 16:38:12" + "time": "2015-09-11 15:44:41" }, { "name": "sensiolabs/ansi-to-html", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/sensiolabs/ansi-to-html.git", - "reference": "fd0aa98170e12131ab989c39252df076cff60121" + "reference": "02598b975c510e9e7d07d0be0a89c7a6b43464d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/ansi-to-html/zipball/fd0aa98170e12131ab989c39252df076cff60121", - "reference": "fd0aa98170e12131ab989c39252df076cff60121", + "url": "https://api.github.com/repos/sensiolabs/ansi-to-html/zipball/02598b975c510e9e7d07d0be0a89c7a6b43464d6", + "reference": "02598b975c510e9e7d07d0be0a89c7a6b43464d6", "shasum": "" }, "require": { @@ -404,32 +412,32 @@ } ], "description": "A library to convert a text with ANSI codes to HTML", - "time": "2015-03-17 06:34:10" + "time": "2015-07-22 03:07:58" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.3.1", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a" + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421", + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "mockery/mockery": "~0.9.1" + "mockery/mockery": "~0.9.1,<0.9.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -453,38 +461,41 @@ "description": "Swiftmailer, free feature-rich PHP mailer", "homepage": "http://swiftmailer.org", "keywords": [ + "email", "mail", "mailer" ], - "time": "2014-12-05 14:17:14" + "time": "2015-06-06 14:19:39" }, { "name": "symfony/config", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Config", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/Config.git", - "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408" + "url": "https://github.com/symfony/config.git", + "reference": "9698fdf0a750d6887d5e7729d5cf099765b20e61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/a9f781ba1221067d1f07c8cec0bc50f81b8d7408", - "reference": "a9f781ba1221067d1f07c8cec0bc50f81b8d7408", + "url": "https://api.github.com/repos/symfony/config/zipball/9698fdf0a750d6887d5e7729d5cf099765b20e61", + "reference": "9698fdf0a750d6887d5e7729d5cf099765b20e61", "shasum": "" }, "require": { - "php": ">=5.3.3", + "php": ">=5.3.9", "symfony/filesystem": "~2.3" }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Config\\": "" } }, @@ -493,40 +504,40 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Config Component", - "homepage": "http://symfony.com", - "time": "2015-01-21 20:57:55" + "homepage": "https://symfony.com", + "time": "2015-09-21 15:02:29" }, { "name": "symfony/console", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Console", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34" + "url": "https://github.com/symfony/console.git", + "reference": "06cb17c013a82f94a3d840682b49425cd00a2161" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/e44154bfe3e41e8267d7a3794cd9da9a51cfac34", - "reference": "e44154bfe3e41e8267d7a3794cd9da9a51cfac34", + "url": "https://api.github.com/repos/symfony/console/zipball/06cb17c013a82f94a3d840682b49425cd00a2161", + "reference": "06cb17c013a82f94a3d840682b49425cd00a2161", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" }, "require-dev": { "psr/log": "~1.0", "symfony/event-dispatcher": "~2.1", + "symfony/phpunit-bridge": "~2.7", "symfony/process": "~2.1" }, "suggest": { @@ -537,11 +548,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Console\\": "" } }, @@ -550,45 +561,47 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Console Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" + "homepage": "https://symfony.com", + "time": "2015-09-25 08:32:23" }, { "name": "symfony/filesystem", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Filesystem", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/Filesystem.git", - "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7" + "url": "https://github.com/symfony/filesystem.git", + "reference": "a17f8a17c20e8614c15b8e116e2f4bcde102cfab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a1f566d1f92e142fa1593f4555d6d89e3044a9b7", - "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/a17f8a17c20e8614c15b8e116e2f4bcde102cfab", + "reference": "a17f8a17c20e8614c15b8e116e2f4bcde102cfab", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Filesystem\\": "" } }, @@ -597,45 +610,47 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Filesystem Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 21:13:09" + "homepage": "https://symfony.com", + "time": "2015-09-09 17:42:36" }, { "name": "symfony/yaml", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Yaml", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8" + "url": "https://github.com/symfony/yaml.git", + "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/60ed7751671113cf1ee7d7778e691642c2e9acd8", - "reference": "60ed7751671113cf1ee7d7778e691642c2e9acd8", + "url": "https://api.github.com/repos/symfony/yaml/zipball/31cb2ad0155c95b88ee55fe12bc7ff92232c1770", + "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" } }, @@ -644,18 +659,18 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Yaml Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" + "homepage": "https://symfony.com", + "time": "2015-09-14 14:14:09" } ], "packages-dev": [ @@ -714,16 +729,16 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { @@ -734,7 +749,7 @@ "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { @@ -743,8 +758,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -764,30 +779,78 @@ "constructor", "instantiate" ], - "time": "2014-10-13 12:58:55" + "time": "2015-06-14 21:17:01" }, { - "name": "pdepend/pdepend", - "version": "2.0.4", + "name": "jakub-onderka/php-parallel-lint", + "version": "v0.8", "source": { "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "1b0acf162da4f30237987e61e177a57f78e3d87e" + "url": "https://github.com/JakubOnderka/PHP-Parallel-Lint.git", + "reference": "2b242dcdbdd7369d2a746518ac31bb30c514b728" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/1b0acf162da4f30237987e61e177a57f78e3d87e", - "reference": "1b0acf162da4f30237987e61e177a57f78e3d87e", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Parallel-Lint/zipball/2b242dcdbdd7369d2a746518ac31bb30c514b728", + "reference": "2b242dcdbdd7369d2a746518ac31bb30c514b728", "shasum": "" }, "require": { - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "4.*@stable", - "squizlabs/php_codesniffer": "@stable" + "jakub-onderka/php-console-highlighter": "~0.3", + "nette/tester": "~1.3" + }, + "suggest": { + "jakub-onderka/php-console-highlighter": "Highlight syntax in code snippet" + }, + "bin": [ + "parallel-lint" + ], + "type": "library", + "autoload": { + "classmap": [ + "./" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com" + } + ], + "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint", + "time": "2014-10-05 10:19:39" + }, + { + "name": "pdepend/pdepend", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "a77b6bede0afdd232155eb6f1de0b2826bcf2803" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/a77b6bede0afdd232155eb6f1de0b2826bcf2803", + "reference": "a77b6bede0afdd232155eb6f1de0b2826bcf2803", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0", + "symfony/dependency-injection": "^2.3.0", + "symfony/filesystem": "^2.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0.0", + "squizlabs/php_codesniffer": "^2.0.0" }, "bin": [ "src/bin/pdepend" @@ -803,7 +866,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2014-12-04 12:38:39" + "time": "2015-09-24 14:17:05" }, { "name": "phpdocumentor/reflection-docblock", @@ -856,24 +919,27 @@ }, { "name": "phploc/phploc", - "version": "2.0.6", + "version": "2.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phploc.git", - "reference": "322ad07c112d5c6832abed4269d648cacff5959b" + "reference": "6cdf01336c06d20825831fe8cee70764fe373585" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/322ad07c112d5c6832abed4269d648cacff5959b", - "reference": "322ad07c112d5c6832abed4269d648cacff5959b", + "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/6cdf01336c06d20825831fe8cee70764fe373585", + "reference": "6cdf01336c06d20825831fe8cee70764fe373585", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/finder-facade": "~1.1", - "sebastian/git": "~1.0", - "sebastian/version": "~1.0", - "symfony/console": "~2.2" + "sebastian/git": "~2.0", + "sebastian/version": "~1.0.3", + "symfony/console": "~2.5" + }, + "require-dev": { + "phpunit/phpunit": "~4" }, "bin": [ "phploc" @@ -881,7 +947,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -902,31 +968,29 @@ ], "description": "A tool for quickly measuring the size of a PHP project.", "homepage": "https://github.com/sebastianbergmann/phploc", - "time": "2014-06-25 08:11:02" + "time": "2015-08-04 07:41:00" }, { "name": "phpmd/phpmd", - "version": "2.2.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "580e6ca75b472a844389ab8df7a0b412901d0d91" + "reference": "08b5bcd454a7148579b68931fc500d824afd3bb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/580e6ca75b472a844389ab8df7a0b412901d0d91", - "reference": "580e6ca75b472a844389ab8df7a0b412901d0d91", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/08b5bcd454a7148579b68931fc500d824afd3bb5", + "reference": "08b5bcd454a7148579b68931fc500d824afd3bb5", "shasum": "" }, "require": { - "pdepend/pdepend": "2.0.*", - "php": ">=5.3.0", - "symfony/config": ">=2.4", - "symfony/dependency-injection": ">=2.4", - "symfony/filesystem": ">=2.4" + "pdepend/pdepend": "~2.0", + "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "*" + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" }, "bin": [ "src/bin/phpmd" @@ -946,12 +1010,18 @@ "name": "Manuel Pichler", "email": "github@manuel-pichler.de", "homepage": "https://github.com/manuelpichler", - "role": "Project founder" + "role": "Project Founder" }, { "name": "Other contributors", "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" } ], "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", @@ -963,25 +1033,26 @@ "phpmd", "pmd" ], - "time": "2015-01-25 13:46:59" + "time": "2015-09-24 14:37:49" }, { "name": "phpspec/prophecy", - "version": "v1.3.1", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9" + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/9ca52329bcdd1500de24427542577ebf3fc2f1c9", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "phpdocumentor/reflection-docblock": "~2.0" + "doctrine/instantiator": "^1.0.2", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1" }, "require-dev": { "phpspec/phpspec": "~2.0" @@ -989,7 +1060,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -1013,7 +1084,7 @@ } ], "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "http://phpspec.org", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", @@ -1022,20 +1093,20 @@ "spy", "stub" ], - "time": "2014-11-17 16:23:49" + "time": "2015-08-13 10:07:40" }, { "name": "phpunit/php-code-coverage", - "version": "2.0.15", + "version": "2.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67" + "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/34cc484af1ca149188d0d9e91412191e398e0b67", - "reference": "34cc484af1ca149188d0d9e91412191e398e0b67", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef1ca6835468857944d5c3b48fa503d5554cff2f", + "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f", "shasum": "" }, "require": { @@ -1043,7 +1114,7 @@ "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", + "sebastian/environment": "^1.3.2", "sebastian/version": "~1.0" }, "require-dev": { @@ -1058,7 +1129,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -1084,35 +1155,37 @@ "testing", "xunit" ], - "time": "2015-01-24 10:06:35" + "time": "2015-09-14 06:51:16" }, { "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -1129,20 +1202,20 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2015-06-21 13:08:43" }, { "name": "phpunit/php-text-template", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { @@ -1151,20 +1224,17 @@ "type": "library", "autoload": { "classmap": [ - "Text/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1173,20 +1243,20 @@ "keywords": [ "template" ], - "time": "2014-01-30 17:20:04" + "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", - "version": "1.0.5", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", "shasum": "" }, "require": { @@ -1195,13 +1265,10 @@ "type": "library", "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -1217,20 +1284,20 @@ "keywords": [ "timer" ], - "time": "2013-08-02 07:42:54" + "time": "2015-06-21 08:01:12" }, { "name": "phpunit/php-token-stream", - "version": "1.4.0", + "version": "1.4.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74" + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db32c18eba00b121c145575fcbcd4d4d24e6db74", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", "shasum": "" }, "require": { @@ -1266,20 +1333,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-01-17 09:51:32" + "time": "2015-09-15 10:49:45" }, { "name": "phpunit/phpunit", - "version": "4.5.1", + "version": "4.8.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4" + "reference": "463163747474815c5ccd4ae12b5b355ec12158e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6429b0995b24a2d9dfe5587ee3a7071c1161af4", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/463163747474815c5ccd4ae12b5b355ec12158e8", + "reference": "463163747474815c5ccd4ae12b5b355ec12158e8", "shasum": "" }, "require": { @@ -1289,19 +1356,19 @@ "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.3.2", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", + "phpunit/php-timer": ">=1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" + "symfony/yaml": "~2.1|~3.0" }, "suggest": { "phpunit/php-invoker": "~1.1" @@ -1312,7 +1379,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5.x-dev" + "dev-master": "4.8.x-dev" } }, "autoload": { @@ -1338,29 +1405,30 @@ "testing", "xunit" ], - "time": "2015-03-29 09:24:05" + "time": "2015-10-01 09:14:30" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.0", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "c63d2367247365f688544f0d500af90a11a44c65" + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65", - "reference": "c63d2367247365f688544f0d500af90a11a44c65", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.1", + "doctrine/instantiator": "^1.0.2", "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "suggest": { "ext-soap": "*" @@ -1393,20 +1461,20 @@ "mock", "xunit" ], - "time": "2014-10-03 05:12:11" + "time": "2015-10-02 06:51:40" }, { "name": "sebastian/comparator", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", "shasum": "" }, "require": { @@ -1420,7 +1488,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1457,20 +1525,20 @@ "compare", "equality" ], - "time": "2015-01-29 16:28:08" + "time": "2015-07-26 15:48:44" }, { "name": "sebastian/diff", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7" + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", "shasum": "" }, "require": { @@ -1482,7 +1550,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1509,32 +1577,32 @@ "keywords": [ "diff" ], - "time": "2014-08-15 10:29:00" + "time": "2015-02-22 15:13:53" }, { "name": "sebastian/environment", - "version": "1.2.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7" + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -1559,20 +1627,20 @@ "environment", "hhvm" ], - "time": "2014-10-25 08:00:45" + "time": "2015-08-03 06:14:51" }, { "name": "sebastian/exporter", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", "shasum": "" }, "require": { @@ -1625,25 +1693,25 @@ "export", "exporter" ], - "time": "2015-01-27 07:23:06" + "time": "2015-06-21 07:55:53" }, { "name": "sebastian/finder-facade", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/finder-facade.git", - "reference": "1e396fda3449fce9df032749fa4fa2619e0347e0" + "reference": "a520dcc3dd39160eea480daa3426f4fd419a327b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/1e396fda3449fce9df032749fa4fa2619e0347e0", - "reference": "1e396fda3449fce9df032749fa4fa2619e0347e0", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/a520dcc3dd39160eea480daa3426f4fd419a327b", + "reference": "a520dcc3dd39160eea480daa3426f4fd419a327b", "shasum": "" }, "require": { - "symfony/finder": ">=2.2.0", - "theseer/fdomdocument": ">=1.3.1" + "symfony/finder": "~2.3", + "theseer/fdomdocument": "~1.3" }, "type": "library", "autoload": { @@ -1664,20 +1732,20 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2013-05-28 06:10:03" + "time": "2015-06-04 08:11:58" }, { "name": "sebastian/git", - "version": "1.2.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/git.git", - "reference": "a99fbc102e982c1404041ef3e4d431562b29bcba" + "reference": "2d5c139d0eedcb9e67e0e9ca08023be6e9b7b47b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/git/zipball/a99fbc102e982c1404041ef3e4d431562b29bcba", - "reference": "a99fbc102e982c1404041ef3e4d431562b29bcba", + "url": "https://api.github.com/repos/sebastianbergmann/git/zipball/2d5c139d0eedcb9e67e0e9ca08023be6e9b7b47b", + "reference": "2d5c139d0eedcb9e67e0e9ca08023be6e9b7b47b", "shasum": "" }, "require": { @@ -1686,7 +1754,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1701,8 +1769,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], "description": "Simple wrapper for Git", @@ -1710,7 +1777,7 @@ "keywords": [ "git" ], - "time": "2013-08-04 09:35:29" + "time": "2015-04-06 16:23:43" }, { "name": "sebastian/global-state", @@ -1765,16 +1832,16 @@ }, { "name": "sebastian/recursion-context", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", "shasum": "" }, "require": { @@ -1814,20 +1881,20 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" + "time": "2015-06-21 08:04:50" }, { "name": "sebastian/version", - "version": "1.0.4", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b" + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "shasum": "" }, "type": "library", @@ -1849,20 +1916,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2014-12-15 14:25:24" + "time": "2015-06-21 13:59:46" }, { "name": "squizlabs/php_codesniffer", - "version": "2.3.0", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5046b0e01c416fc2b06df961d0673c85bcdc896c" + "reference": "11a2545c44a5915f883e2e5ec12e14ed345e3ab2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5046b0e01c416fc2b06df961d0673c85bcdc896c", - "reference": "5046b0e01c416fc2b06df961d0673c85bcdc896c", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/11a2545c44a5915f883e2e5ec12e14ed345e3ab2", + "reference": "11a2545c44a5915f883e2e5ec12e14ed345e3ab2", "shasum": "" }, "require": { @@ -1923,25 +1990,24 @@ "phpcs", "standards" ], - "time": "2015-03-04 02:07:03" + "time": "2015-09-09 00:18:50" }, { "name": "symfony/dependency-injection", - "version": "v2.6.4", - "target-dir": "Symfony/Component/DependencyInjection", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "42bbb43fab66292a1865dc9616c299904c3d4d14" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "422c3819b110f610d79c6f1dc38af23787dc790e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/42bbb43fab66292a1865dc9616c299904c3d4d14", - "reference": "42bbb43fab66292a1865dc9616c299904c3d4d14", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/422c3819b110f610d79c6f1dc38af23787dc790e", + "reference": "422c3819b110f610d79c6f1dc38af23787dc790e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" }, "conflict": { "symfony/expression-language": "<2.6" @@ -1949,6 +2015,7 @@ "require-dev": { "symfony/config": "~2.2", "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", "symfony/yaml": "~2.1" }, "suggest": { @@ -1959,11 +2026,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" } }, @@ -1972,45 +2039,47 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DependencyInjection Component", - "homepage": "http://symfony.com", - "time": "2015-01-25 04:39:26" + "homepage": "https://symfony.com", + "time": "2015-09-15 08:30:42" }, { "name": "symfony/finder", - "version": "v2.6.4", - "target-dir": "Symfony/Component/Finder", + "version": "v2.7.5", "source": { "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "16513333bca64186c01609961a2bb1b95b5e1355" + "url": "https://github.com/symfony/finder.git", + "reference": "8262ab605973afbb3ef74b945daabf086f58366f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/16513333bca64186c01609961a2bb1b95b5e1355", - "reference": "16513333bca64186c01609961a2bb1b95b5e1355", + "url": "https://api.github.com/repos/symfony/finder/zipball/8262ab605973afbb3ef74b945daabf086f58366f", + "reference": "8262ab605973afbb3ef74b945daabf086f58366f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Finder\\": "" } }, @@ -2019,31 +2088,31 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Finder Component", - "homepage": "http://symfony.com", - "time": "2015-01-03 08:01:59" + "homepage": "https://symfony.com", + "time": "2015-09-19 19:59:23" }, { "name": "theseer/fdomdocument", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/theseer/fDOMDocument.git", - "reference": "d08cf070350f884c63fc9078d27893c2ab6c7cef" + "reference": "d9ad139d6c2e8edf5e313ffbe37ff13344cf0684" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/d08cf070350f884c63fc9078d27893c2ab6c7cef", - "reference": "d08cf070350f884c63fc9078d27893c2ab6c7cef", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/d9ad139d6c2e8edf5e313ffbe37ff13344cf0684", + "reference": "d9ad139d6c2e8edf5e313ffbe37ff13344cf0684", "shasum": "" }, "require": { @@ -2070,7 +2139,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2014-09-13 10:57:19" + "time": "2015-05-27 22:58:02" } ], "aliases": [], diff --git a/console b/console index 36645768..412dbbdb 100755 --- a/console +++ b/console @@ -21,6 +21,7 @@ use PHPCI\Command\DaemonCommand; use PHPCI\Command\PollCommand; use PHPCI\Command\CreateAdminCommand; use PHPCI\Command\CreateBuildCommand; +use PHPCI\Command\WorkerCommand; use PHPCI\Service\BuildService; use Symfony\Component\Console\Application; use b8\Store\Factory; @@ -36,5 +37,6 @@ $application->add(new DaemonCommand($loggerConfig->getFor('DaemonCommand'))); $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->run(); From 183d7d9e50da55295874a2ff610c9dfaf81385e7 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 14:07:48 +0100 Subject: [PATCH 2/6] Making duplicate builds work again. --- PHPCI/Service/BuildService.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index ed1ed6c3..56eb76ed 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -114,7 +114,13 @@ class BuildService $build->setCreated(new \DateTime()); $build->setStatus(0); - return $this->buildStore->save($build); + $build = $this->buildStore->save($build); + + $build = BuildFactory::getBuild($build); + $build->sendStatusPostback(); + $this->addBuildToQueue($build); + + return $build; } /** From b2ed9f102b19187b812c0ad49a456b5fa81667f2 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 14:11:43 +0100 Subject: [PATCH 3/6] Docblock fixes --- PHPCI/Service/BuildService.php | 5 ++++- PHPCI/Worker/BuildWorker.php | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index 56eb76ed..94eb9792 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -134,7 +134,10 @@ class BuildService return $this->buildStore->delete($build); } - + /** + * Takes a build and puts it into the queue to be run (if using a queue) + * @param Build $build + */ public function addBuildToQueue(Build $build) { $config = Config::getInstance(); diff --git a/PHPCI/Worker/BuildWorker.php b/PHPCI/Worker/BuildWorker.php index 9d13ffdd..cc070a76 100644 --- a/PHPCI/Worker/BuildWorker.php +++ b/PHPCI/Worker/BuildWorker.php @@ -12,7 +12,10 @@ use PHPCI\BuildFactory; use PHPCI\Logging\BuildDBLogHandler; use PHPCI\Model\Build; - +/** + * Class BuildWorker + * @package PHPCI\Worker + */ class BuildWorker { /** From 771bee0aa3396d2f386bbfea01d4c7ee0194ab0c Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 14:41:13 +0100 Subject: [PATCH 4/6] Fixings --- PHPCI/BuildFactory.php | 21 ++++++++++++++++----- PHPCI/Model/Build/GithubBuild.php | 18 +++++++++++++----- PHPCI/Service/BuildService.php | 8 +++++++- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/PHPCI/BuildFactory.php b/PHPCI/BuildFactory.php index c7bad338..fb20309d 100644 --- a/PHPCI/BuildFactory.php +++ b/PHPCI/BuildFactory.php @@ -36,12 +36,17 @@ class BuildFactory /** * Takes a generic build and returns a type-specific build model. - * @param Build $base The build from which to get a more specific build type. + * @param Build $build The build from which to get a more specific build type. + * @param string $type Set the type manually if you already know it. * @return Build */ - public static function getBuild(Build $base) + public static function getBuild(Build $build, $type = null) { - switch ($base->getProject()->getType()) { + if (is_null($type) && !is_null($build->getProject())) { + $type = $build->getProject()->getType(); + } + + switch ($type) { case 'remote': $type = 'RemoteGitBuild'; break; @@ -63,10 +68,16 @@ class BuildFactory case 'svn': $type = 'SubversionBuild'; break; + default: + $type = null; + break; } - $type = '\\PHPCI\\Model\\Build\\' . $type; + if (!is_null($type)) { + $type = '\\PHPCI\\Model\\Build\\' . $type; + $build = new $type($build->getDataArray()); + } - return new $type($base->getDataArray()); + return $build; } } diff --git a/PHPCI/Model/Build/GithubBuild.php b/PHPCI/Model/Build/GithubBuild.php index 0ae3b9e0..130d7acb 100644 --- a/PHPCI/Model/Build/GithubBuild.php +++ b/PHPCI/Model/Build/GithubBuild.php @@ -45,12 +45,16 @@ class GithubBuild extends RemoteGitBuild { $token = \b8\Config::getInstance()->get('phpci.github.token'); - if (empty($token)) { + if (empty($token) || empty($this->data['id'])) { return; } $project = $this->getProject(); + if (empty($project)) { + return; + } + $url = 'https://api.github.com/repos/'.$project->getReference().'/statuses/'.$this->getCommitId(); $http = new \b8\HttpClient(); @@ -114,10 +118,14 @@ class GithubBuild extends RemoteGitBuild { $rtn = parent::getCommitMessage($this->data['commit_message']); - $reference = $this->getProject()->getReference(); - $commitLink = '#$1'; - $rtn = preg_replace('/\#([0-9]+)/', $commitLink, $rtn); - $rtn = preg_replace('/\@([a-zA-Z0-9_]+)/', '@$1', $rtn); + $project = $this->getProject(); + + if (!is_null($project)) { + $reference = $project->getReference(); + $commitLink = '#$1'; + $rtn = preg_replace('/\#([0-9]+)/', $commitLink, $rtn); + $rtn = preg_replace('/\@([a-zA-Z0-9_]+)/', '@$1', $rtn); + } return $rtn; } diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index 94eb9792..3f03f559 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -87,7 +87,7 @@ class BuildService $build = $this->buildStore->save($build); - $build = BuildFactory::getBuild($build); + $build = BuildFactory::getBuild($build, $project->getType()); $build->sendStatusPostback(); $this->addBuildToQueue($build); @@ -140,6 +140,12 @@ class BuildService */ public function addBuildToQueue(Build $build) { + $buildId = $build->getId(); + + if (empty($buildId)) { + return; + } + $config = Config::getInstance(); $settings = $config->get('phpci.worker', []); From 11445304d6e77a38ef71ed50bbc2a530d7dc4ec8 Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 14:48:17 +0100 Subject: [PATCH 5/6] Making PHPMD happy. --- PHPCI/BuildFactory.php | 64 +++++++++++++++------------------- PHPCI/Service/BuildService.php | 2 +- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/PHPCI/BuildFactory.php b/PHPCI/BuildFactory.php index fb20309d..fdc8a212 100644 --- a/PHPCI/BuildFactory.php +++ b/PHPCI/BuildFactory.php @@ -37,45 +37,39 @@ class BuildFactory /** * Takes a generic build and returns a type-specific build model. * @param Build $build The build from which to get a more specific build type. - * @param string $type Set the type manually if you already know it. * @return Build */ - public static function getBuild(Build $build, $type = null) + public static function getBuild(Build $build) { - if (is_null($type) && !is_null($build->getProject())) { - $type = $build->getProject()->getType(); - } + $project = $build->getProject(); - switch ($type) { - case 'remote': - $type = 'RemoteGitBuild'; - break; - case 'local': - $type = 'LocalBuild'; - break; - case 'github': - $type = 'GithubBuild'; - break; - case 'bitbucket': - $type = 'BitbucketBuild'; - break; - case 'gitlab': - $type = 'GitlabBuild'; - break; - case 'hg': - $type = 'MercurialBuild'; - break; - case 'svn': - $type = 'SubversionBuild'; - break; - default: - $type = null; - break; - } - - if (!is_null($type)) { - $type = '\\PHPCI\\Model\\Build\\' . $type; - $build = new $type($build->getDataArray()); + if (!empty($project)) { + switch ($project->getType()) { + case 'remote': + $type = 'RemoteGitBuild'; + break; + case 'local': + $type = 'LocalBuild'; + break; + case 'github': + $type = 'GithubBuild'; + break; + case 'bitbucket': + $type = 'BitbucketBuild'; + break; + case 'gitlab': + $type = 'GitlabBuild'; + break; + case 'hg': + $type = 'MercurialBuild'; + break; + case 'svn': + $type = 'SubversionBuild'; + break; + } + + $class = '\\PHPCI\\Model\\Build\\' . $type; + $build = new $class($build->getDataArray()); } return $build; diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php index 3f03f559..117b94e7 100644 --- a/PHPCI/Service/BuildService.php +++ b/PHPCI/Service/BuildService.php @@ -87,7 +87,7 @@ class BuildService $build = $this->buildStore->save($build); - $build = BuildFactory::getBuild($build, $project->getType()); + $build = BuildFactory::getBuild($build); $build->sendStatusPostback(); $this->addBuildToQueue($build); From 9dd6edc24ab5d78a225fb2bfa9955bca4b540c9f Mon Sep 17 00:00:00 2001 From: Dan Cryer Date: Mon, 5 Oct 2015 15:07:25 +0100 Subject: [PATCH 6/6] Fix --- PHPCI/BuildFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PHPCI/BuildFactory.php b/PHPCI/BuildFactory.php index fdc8a212..1dbc4017 100644 --- a/PHPCI/BuildFactory.php +++ b/PHPCI/BuildFactory.php @@ -67,7 +67,7 @@ class BuildFactory $type = 'SubversionBuild'; break; } - + $class = '\\PHPCI\\Model\\Build\\' . $type; $build = new $class($build->getDataArray()); }