diff --git a/LibHooks/config/commit-msg.xml b/LibHooks/config/commit-msg.xml index 7f3550c..04e1e3c 100644 --- a/LibHooks/config/commit-msg.xml +++ b/LibHooks/config/commit-msg.xml @@ -17,10 +17,24 @@ <class>\PreCommit\Issue\JiraAdapter</class> </adapter> </issue> + <message> + <parser> + <class>\PreCommit\Filter\ShortCommitMsg\Parser\Jira</class> + </parser> + </message> </jira> <github> - <not_implemented /> + <issue> + <adapter> + <class>\PreCommit\Issue\GitHubAdapter</class> + </adapter> + </issue> + <message> + <parser> + <class>\PreCommit\Filter\ShortCommitMsg\Parser\GitHub</class> + </parser> + </message> </github> <redmine> @@ -109,6 +123,14 @@ </default> </allowed> </jira> + <github> + <allowed> + <!--Commit message type: default--> + <default> + <open>1</open> + </default> + </allowed> + </github> </status> </issue> </IssueStatus> @@ -172,6 +194,15 @@ <Bug>bug</Bug> </default> </jira> + <github> + <default> + <!--JIRA issue-type map to general issue-type--> + <!-- Tasks --> + <enhancement>task</enhancement> + <!-- Bugs --> + <bug>bug</bug> + </default> + </github> </tracker> </type> </issue> diff --git a/LibHooks/lib/PreCommit/Filter/ShortCommitMsg.php b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg.php index 15a552e..0626029 100644 --- a/LibHooks/lib/PreCommit/Filter/ShortCommitMsg.php +++ b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg.php @@ -60,11 +60,14 @@ protected function _getFormatterConfig() /** * Get parser * - * @return \PreCommit\Filter\ShortCommitMsg\Parser + * @return \PreCommit\Filter\ShortCommitMsg\Jira\Parser */ protected function _getParser() { - return new ShortCommitMsg\Parser(); + $class = $this->_getConfig()->getNode( + 'tracker/' . $this->_getTrackerType() . '/message/parser/class' + ); + return new $class; } /** @@ -98,4 +101,14 @@ protected function _getConfig() { return Config::getInstance(); } + + /** + * Get tracker type + * + * @return string + */ + protected function _getTrackerType() + { + return (string)$this->_getConfig()->getNode('tracker/type'); + } } diff --git a/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/GitHub.php b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/GitHub.php new file mode 100644 index 0000000..40eb14a --- /dev/null +++ b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/GitHub.php @@ -0,0 +1,29 @@ +<?php +namespace PreCommit\Filter\ShortCommitMsg\Parser; + +use PreCommit\Interpreter\InterpreterInterface; +use PreCommit\Filter\ShortCommitMsg; + +/** + * Class filter to parse short message + * + * @package PreCommit\Filter\ShortCommitMsg\GitHub + */ +class GitHub + extends ShortCommitMsg\Parser\Jira + implements InterpreterInterface +{ + /** + * Convert issue number to issue key + * + * Add project key to issue number when it did not set. + * + * @param string $issueNo + * @return string + * @throws \PreCommit\Exception + */ + protected function _normalizeIssueKey($issueNo) + { + return "#" . ltrim($issueNo, '#'); + } +} diff --git a/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser.php b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/Jira.php similarity index 93% rename from LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser.php rename to LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/Jira.php index 5d76625..f98b99c 100644 --- a/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser.php +++ b/LibHooks/lib/PreCommit/Filter/ShortCommitMsg/Parser/Jira.php @@ -1,19 +1,18 @@ <?php -namespace PreCommit\Filter\ShortCommitMsg; +namespace PreCommit\Filter\ShortCommitMsg\Parser; use PreCommit\Config; use PreCommit\Exception; use PreCommit\Interpreter\InterpreterInterface; use PreCommit\Issue; -use PreCommit\Jira\Api; use PreCommit\Message; /** * Class filter to parse short message * - * @package PreCommit\Validator + * @package PreCommit\Filter\ShortCommitMsg\Jira */ -class Parser implements InterpreterInterface +class Jira implements InterpreterInterface { /** * Issue adapter @@ -156,11 +155,10 @@ protected function _getVerbs() * * @return string * @throws \PreCommit\Exception - * @todo Refactor this 'cos it belongs to JIRA only */ protected function _getActiveIssueKey() { - return $this->_getConfig()->getNode('tracker/jira/active_task'); + return $this->_getConfig()->getNode('tracker/' . $this->_getTrackerType() . '/active_task'); } /** @@ -171,14 +169,13 @@ protected function _getActiveIssueKey() * @param string $issueNo * @return string * @throws \PreCommit\Exception - * @todo Refactor this 'cos it belongs to JIRA only */ protected function _normalizeIssueKey($issueNo) { if ((string)(int)$issueNo === $issueNo) { - $project = $this->_getConfig()->getNode('tracker/jira/project'); + $project = $this->_getConfig()->getNode('tracker/' . $this->_getTrackerType() . '/project'); if (!$project) { - throw new Exception('JIRA project key is not set. Please add it to issue-key or add by XPath "jira/project" in project configuration file "commithook.xml" within current project.'); + throw new Exception('JIRA project key is not set. Please add it to issue-key or add by XPath "tracker/jira/project" in project configuration file "commithook.xml" within current project.'); } $issueNo = "$project-$issueNo"; } @@ -358,4 +355,14 @@ protected function _getIssueKeyCompleteRegular() { return '[A-Z0-9]+[-][0-9]+'; } + + /** + * Get tracker type + * + * @return string + */ + protected function _getTrackerType() + { + return (string)$this->_getConfig()->getNode('tracker/type'); + } } diff --git a/LibHooks/lib/PreCommit/Issue/Exception.php b/LibHooks/lib/PreCommit/Issue/Exception.php new file mode 100644 index 0000000..2793dda --- /dev/null +++ b/LibHooks/lib/PreCommit/Issue/Exception.php @@ -0,0 +1,12 @@ +<?php +namespace PreCommit\Issue; + +/** + * Issue adapters exception class + * + * @package PreCommit\Issue + */ +class Exception extends \PreCommit\Exception +{ + +} diff --git a/LibHooks/lib/PreCommit/Issue/GitHubAdapter.php b/LibHooks/lib/PreCommit/Issue/GitHubAdapter.php new file mode 100644 index 0000000..e801189 --- /dev/null +++ b/LibHooks/lib/PreCommit/Issue/GitHubAdapter.php @@ -0,0 +1,306 @@ +<?php +namespace PreCommit\Issue; + +use Github\Client as Api; +use Zend\Cache\Storage\Adapter\Filesystem as CacheAdapter; + +/** + * Class GitHubAdapter + * + * @package PreCommit\Issue + */ +class GitHubAdapter extends AdapterAbstract implements AdapterInterface +{ + /** + * Cache schema version + */ + const CACHE_SCHEMA_VERSION = 0; + + /** + * Exception code when issue not found + */ + const EXCEPTION_CODE_ISSUE_NOT_FOUND = 404; + + /** + * Issue data + * + * @var array + */ + protected $_issue; + + /** + * Issue key + * + * @var string + */ + protected $_issueKey; + + /** + * Allowed labels which can be used to determine issue type + * + * @var array + */ + protected $_labelTypes = array( + 'bug', 'enhancement' + ); + + /** + * Default issue type (label) + * + * @var array + */ + protected $_defaultLabelType = 'enhancement'; + + /** + * GitHub API client + * + * @var Api + */ + protected $_api; + + /** + * Set issue key + * + * @param string $issueKey + */ + public function __construct($issueKey) + { + parent::__construct($issueKey); + $this->_issueKey = (string)$issueKey; + } + + /** + * Get issue + * + * @return array + * @throws \PreCommit\Issue\Exception + */ + protected function _getIssue() + { + if (null === $this->_issue) { + $this->_issue = $this->_getCachedResult( + $this->_getCacheKey() + ); + if (!$this->_issue) { + $this->_issue = $this->_loadIssueData(); + if (!$this->_issue) { + throw new Exception( + "Issue not {$this->_issueKey} found.", + self::EXCEPTION_CODE_ISSUE_NOT_FOUND + ); + } + $this->_cacheResult( + $this->_getCacheKey(), $this->_issue + ); + } + } + return $this->_issue; + } + + /** + * Get issue number + * + * @return int + */ + protected function _getIssueNumber() + { + return (int)ltrim($this->_issueKey, '#'); + } + + //region Caching methods + /** + * Get cache key + * + * @return string + */ + protected function _getCacheKey() + { + return $this->_getVendorName() . '-' . $this->_getRepositoryName() + . '-' . $this->_getIssueNumber(); + } + + /** + * Write summary to cache file + * + * @param string $key + * @param array $result + * @return $this + */ + protected function _cacheResult($key, $result) + { + if ($result) { + $this->_getCache()->setItem($key, serialize($result)); + } else { + $this->_getCache()->removeItem($key); + } + return $this; + } + + /** + * Get cache summary string + * + * @param string $key + * @return string|bool + */ + protected function _getCachedResult($key) + { + $data = $this->_getCache()->getItem($key); + return $data ? unserialize($data) : null; + } + + /** + * Get cache directory + * + * @return string + */ + protected function _getCacheDir() + { + return $this->_getConfig()->getCacheDir(COMMIT_HOOKS_ROOT); + } + + /** + * Get cache adapter + * + * @return \Zend\Cache\Storage\Adapter\Filesystem + */ + protected function _getCache() + { + return new CacheAdapter( + array( + 'cache_dir' => $this->_getCacheDir(), + 'ttl' => 7200, + 'namespace' => 'issue-github-' . self::CACHE_SCHEMA_VERSION + ) + ); + } + //endregion + + //region Interface methods + /** + * Get issue summary + * + * @return string + */ + public function getSummary() + { + $issue = $this->_getIssue(); + return $issue['title']; + } + + /** + * Get issue key + * + * @return string + */ + public function getKey() + { + $issue = $this->_getIssue(); + return $issue['number']; + } + + /** + * Get issue type + * + * @return string + */ + public function getOriginalType() + { + $issue = $this->_getIssue(); + if (!empty($issue['labels'])) { + foreach ($issue['labels'] as $label) { + if (in_array($label['name'], $this->_labelTypes)) { + return $label['name']; + } + } + } + return $this->_defaultLabelType; + } + + /** + * Get status name + * + * @return string + */ + public function getStatus() + { + $issue = $this->_getIssue(); + return $this->_normalizeName($issue['state']); + } + + /** + * Cache issue + * + * @return $this + */ + public function ignoreIssue() + { + $this->_cacheResult($this->_getCacheKey(), array()); + return $this; + } + //endregion + + //region API methods + /** + * Load issue by API + * + * @return array + * @throws Exception + */ + protected function _loadIssueData() + { + if (!$this->_canRequest()) { + throw new Exception('Connection params not fully set.'); + } + return $this->_getApi()->issue()->show( + $this->_getVendorName(), + $this->_getRepositoryName(), + $this->_getIssueNumber() + ); + } + + /** + * Get GitHub API + * + * @return Api + */ + protected function _getApi() + { + if ($this->_api === null) { + $this->_api = new Api(); + $this->_api->authenticate('andkirby', 'gigaleon33'); + } + return $this->_api; + } + + /** + * Check if can make a request + * + * @return bool + */ + protected function _canRequest() + { + return $this->_getVendorName() + && $this->_getRepositoryName(); + } + //endregion + + /** + * Get vendor name + * + * @return string + */ + protected function _getVendorName() + { + return $this->_getConfig()->getNode('tracker/github/name'); + } + + /** + * Get repository name + * + * @return string + */ + protected function _getRepositoryName() + { + return $this->_getConfig()->getNode('tracker/github/repository'); + } +} diff --git a/commithook.xml b/commithook.xml index 956a1fe..7c6ac66 100644 --- a/commithook.xml +++ b/commithook.xml @@ -1,4 +1,5 @@ <?xml version="1.0"?> +<!-- This is a local configuration file. It is not used in external projects.--> <config> <!--Validators setup--> <validators> @@ -12,4 +13,12 @@ </filter> </FileFilter> </validators> + + <tracker> + <type>github</type> + <github> + <name>andkirby</name> + <repository>commithook</repository> + </github> + </tracker> </config> diff --git a/composer.json b/composer.json index 760ed24..8edd161 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,8 @@ "php": ">=5.3.2", "symfony/console": "~2.5@stable", "chobie/jira-api-restclient": "2.0.x-dev", - "zendframework/zend-cache": "~2.5@stable" + "zendframework/zend-cache": "~2.5@stable", + "knplabs/github-api": "~1.4" }, "require-dev": { "phpunit/phpunit": "~4.0@stable" diff --git a/composer.lock b/composer.lock index 4743e56..a1a0fe6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "b75ff0d9c0e3ee10c2b819f5b1bd1c5e", - "content-hash": "0b4e45c349aa45a39fa7fd0e28f8f011", + "hash": "8d3bd92604c97f1f1b457a422f4a0d22", + "content-hash": "cf39bf9089ff15a2ad62895da8bb361c", "packages": [ { "name": "chobie/jira-api-restclient", @@ -57,28 +57,184 @@ ], "time": "2014-07-27 11:55:20" }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2015-03-18 18:23:50" + }, + { + "name": "knplabs/github-api", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/php-github-api.git", + "reference": "832b7be695ed2733741cd5c79166b4a88fb50786" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/832b7be695ed2733741cd5c79166b4a88fb50786", + "reference": "832b7be695ed2733741cd5c79166b4a88fb50786", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "guzzle/guzzle": "~3.7", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "knplabs/gaufrette": "Needed for optional Gaufrette cache" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Github\\": "lib/Github/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thibault Duplessis", + "email": "thibault.duplessis@gmail.com", + "homepage": "http://ornicar.github.com" + }, + { + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" + } + ], + "description": "GitHub API v3 client", + "homepage": "https://github.com/KnpLabs/php-github-api", + "keywords": [ + "api", + "gh", + "gist", + "github" + ], + "time": "2015-10-11 02:38:28" + }, { "name": "symfony/console", - "version": "v2.7.5", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "06cb17c013a82f94a3d840682b49425cd00a2161" + "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/06cb17c013a82f94a3d840682b49425cd00a2161", - "reference": "06cb17c013a82f94a3d840682b49425cd00a2161", + "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", + "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/phpunit-bridge": "~2.7", - "symfony/process": "~2.1" + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" }, "suggest": { "psr/log": "For using the console logger", @@ -88,13 +244,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -112,7 +271,123 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2015-09-25 08:32:23" + "time": "2015-11-30 12:35:10" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5eb815363c0388e83247e7e9853e5dbc14999cc", + "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2015-10-30 20:15:42" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0b6a8940385311a24e060ec1fe35680e17c74497" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0b6a8940385311a24e060ec1fe35680e17c74497", + "reference": "0b6a8940385311a24e060ec1fe35680e17c74497", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2015-11-04 20:28:58" }, { "name": "zendframework/zend-cache", @@ -890,16 +1165,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.12", + "version": "4.8.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "00194eb95989190a73198390ceca081ad3441a7f" + "reference": "b2caaf8947aba5e002d42126723e9d69795f32b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00194eb95989190a73198390ceca081ad3441a7f", - "reference": "00194eb95989190a73198390ceca081ad3441a7f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b2caaf8947aba5e002d42126723e9d69795f32b4", + "reference": "b2caaf8947aba5e002d42126723e9d69795f32b4", "shasum": "" }, "require": { @@ -958,7 +1233,7 @@ "testing", "xunit" ], - "time": "2015-10-12 03:36:47" + "time": "2015-11-30 08:18:59" }, { "name": "phpunit/phpunit-mock-objects", @@ -1389,34 +1664,34 @@ }, { "name": "symfony/yaml", - "version": "v2.7.5", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770" + "reference": "f79824187de95064a2f5038904c4d7f0227fedb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/31cb2ad0155c95b88ee55fe12bc7ff92232c1770", - "reference": "31cb2ad0155c95b88ee55fe12bc7ff92232c1770", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5", + "reference": "f79824187de95064a2f5038904c4d7f0227fedb5", "shasum": "" }, "require": { "php": ">=5.3.9" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1434,44 +1709,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-09-14 14:14:09" - }, - { - "name": "zf1/zend-exception", - "version": "1.12.11", - "source": { - "type": "git", - "url": "https://github.com/zf1/zend-exception.git", - "reference": "ca30959d3e2f522f481a3d1459386acf1aa4ca74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zf1/zend-exception/zipball/ca30959d3e2f522f481a3d1459386acf1aa4ca74", - "reference": "ca30959d3e2f522f481a3d1459386acf1aa4ca74", - "shasum": "" - }, - "require": { - "php": ">=5.2.11" - }, - "type": "library", - "autoload": { - "psr-0": { - "Zend_Exception": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Zend Framework 1 Exception package", - "homepage": "http://framework.zend.com/", - "keywords": [ - "ZF1", - "exception", - "framework", - "zend" - ], - "time": "2015-04-30 11:10:20" + "time": "2015-11-30 12:35:10" } ], "aliases": [],