[英]PHP codesniffer (phpcs) - how to allow override when using as part of a svn pre-commit hook?
我们有一个PHP 5 Web应用程序,我们目前正在评估PHP CodeSniffer ,以便确定强制代码标准是否可以提高代码质量。
我们将subversion用于代码存储库和部署基础,并且我添加了SVN pre-commit钩子,以确保所有提交的文件都没有编码标准的气味。 该挂钩在技术上是可行的,但会导致太多麻烦而无法实际使用:
鉴于我们今天无法重构整个代码库-有人知道我如何使用svn commit参数,该参数将告诉svn pre-commit钩子不运行phpcs吗?
也许还有另一种方法可以消除上述头痛?
为什么要在预提交时运行它? 我已经使用PHPUnderControl和Hudson来自动化php“构建” ...基本上,他们运行一个ant / phing构建脚本,该脚本在每次提交(自动检测到)后运行自动化测试(PHPUnit)和代码质量扫描程序(包括PHPCS)。 。 因此它不会拒绝提交,但会向您希望构建失败的任何人发送一封不错的电子邮件,并列出原因(有问题的代码的特定行)...
我们发现以下工作效果很好,平衡了获取代码而无需大惊小怪的需求,但是可以防止发布与我们的标准不一致的版本。
首先,我们对提交有一个“开放武器”政策:
然后,我们在暂存/发行版本上采取“紧握拳头”政策:
所有这些都是通过使用phpcs(当然还有phpunit,phpdocumentor等)通过phing自动化的。
我认为ircmaxell
有一个很好的观点-这种标准检查应该在提交前的钩子之外进行,例如在连续集成环境中或在紧要关头,提交后的钩子应该基于提供的信息而不是阻塞承诺!
考虑到这一点,我暂时决定使用选择加入方法。 我配置了svn pre-commit钩子,以在提交消息中查找关键字,如果找到则运行phpcs
。
在预提交的钩子脚本中,例如/var/www/svn/repos/<reponame>/hooks/
;
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
PHPCS=/usr/bin/scripts/phpcs-svn-pre-commit
if [[ `$SVNLOOK log -t $TXN $REPOS | tr "[:upper:]" "[:lower:]"` =~ "\[?standardcode\]?" ]]; then
# Run the PHP code sniffer
PHPCS_STRICT=`$PHPCS "$REPOS" -t "$TXN"`
if [[ $? -ne 0 ]]; then
echo "$PHPCS_STRICT" >>/dev/stderr
echo "*** Commit blocked - Please fix coding standard errors." >>/dev/stderr
exit 1
fi
fi
exit 0
笔记:
[standardcode]
,并且日志消息已转换为小写,以使关键字匹配不区分大小写。 phpcs
提交钩子( /usr/bin/scripts/phpcs-svn-pre-commit
)与phpcs
一起打包(至少在CentOS 5.5中)。 这个想法是,开发人员可以选择将关键字作为一种荣誉徽章放入其提交消息中,但是如果不适合自己的提交,则不必强迫他们检查其代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.