sjparkinson / static-review
5.2.2
2017-11-28 09:16 UTC
Requires
- php: ^5.5 || ^7.0
- league/climate: ^2.0 || ^3.0
- symfony/console: ^2.0
- symfony/process: ^2.1
Requires (Dev)
- mockery/mockery: ^0.9
- phpunit/phpunit: ^4.6 || ^5.0
- sensiolabs/security-checker: ^3.0
- squizlabs/php_codesniffer: ^2.2
Suggests
- sensiolabs/security-checker: required by ComposerSecurityReview.
- squizlabs/php_codesniffer: required by PhpCodeSnifferReview.
README
此包已被弃用 🚨。
请参阅GrumPHP以获取维护的替代方案。
一个可扩展的版本控制钩子框架。
用法
对于由composer管理的项目,您可以简单地运行以下命令...
$ composer require sjparkinson/static-review
钩子可以像这样安装...
$ vendor/bin/static-review.php hook:install vendor/sjparkinson/static-review/hooks/example-pre-commit.php .git/hooks/pre-commit
否则,如果您不使用composer...
$ git clone https://github.com/sjparkinson/static-review.git $ cd static-review/ $ composer install --no-dev --optimize-autoloader $ bin/static-review.php hook:install hooks/example-pre-commit.php ~/.../.git/hooks/pre-commit
全局安装和用法
如果您全局安装了static-review
,这些钩子也可以用于任何项目。
$ composer g require sjparkinson/static-review
然后,就像通常一样安装钩子,但引用全局安装路径。
$ static-review.php hook:install ~/.composer/vendor/sjparkinson/static-review/hooks/static-review-commit-msg.php .git/hooks/commit-msg
这假设您已设置全局composer路径。
示例钩子
Static Review可用于文件和提交消息的审查。以下是每个的基本钩子。
对于文件
#!/usr/bin/env php <?php include __DIR__ . '/../../../autoload.php'; // Reference the required classes. use StaticReview\StaticReview; use StaticReview\Review\General\LineEndingsReview; [...] $reporter = new Reporter(); $review = new StaticReview($reporter); // Add any reviews to the StaticReview instance, supports a fluent interface. $review->addReview(new LineEndingsReview()); $git = new GitVersionControl(); // Review the staged files. $review->files($git->getStagedFiles()); // Check if any issues were found. // Exit with a non-zero status to block the commit. ($reporter->hasIssues()) ? exit(1) : exit(0);
对于提交消息
#!/usr/bin/env php <?php include __DIR__ . '/../../../autoload.php'; // Reference the required classes. use StaticReview\StaticReview; use StaticReview\Review\Message\BodyLineLengthReview; [...] $reporter = new Reporter(); $review = new StaticReview($reporter); // Add any reviews to the StaticReview instance, supports a fluent interface. $review->addReview(new BodyLineLengthReview()); $git = new GitVersionControl(); // Review the current commit message. // The hook is passed the file holding the commit message as the first argument. $review->message($git->getCommitMessage($argv[1])); // Check if any issues were found. // Exit with a non-zero status to block the commit. ($reporter->hasIssues()) ? exit(1) : exit(0);
文件的示例审查
class NoCommitTagReview extends AbstractFileReview { // Review any text based file. public function canReviewFile(FileInterface $file) { $mime = $file->getMimeType(); // check to see if the mime-type starts with 'text' return (substr($mime, 0, 4) === 'text'); } // Checks if the file contains `NOCOMMIT`. public function review(ReporterInterface $reporter, ReviewableInterface $file) { $cmd = sprintf('grep --fixed-strings --ignore-case --quiet "NOCOMMIT" %s', $file->getFullPath()); $process = $this->getProcess($cmd); $process->run(); if ($process->isSuccessful()) { $message = 'A NOCOMMIT tag was found'; $reporter->error($message, $this, $file); } } }
消息的示例审查
class WorkInProgressReview extends AbstractMessageReview { // Check if the commit message contains "wip" public function review(ReporterInterface $reporter, ReviewableInterface $commit) { $fulltext = $commit->getSubject() . PHP_EOL . $commit->getBody(); if (preg_match('/\bwip\b/i', $fulltext)) { $message = 'Do not commit WIP to shared branches'; $reporter->error($message, $this, $commit); } } }
单元测试
$ git clone https://github.com/sjparkinson/static-review.git $ cd static-review/ $ vagrant up $ vagrant ssh ... $ cd /srv $ composer update $ composer test
许可证
此库的内容由Samuel Parkinson以MIT许可证发布。