我们有一个PHP5web应用程序,我们目前正在评估PHP CodeSniffer,以决定强制代码标准是否提高了代码质量。
我们使用颠覆作为代码存储库和部署库,我还添加了一个SVN 预提交钩,以确保提交的所有文件都不受编码标准气味的影响。钩子在技术上是有效的,但会导致太多的头痛实际上是有用的:
考虑到我们今天不能重构整个代码库--有人知道我如何使用svn提交参数来告诉svn预提交钩子不运行phpcs吗?
或者还有另外一种方法来消除所描述的头痛?
发布于 2010-07-30 15:48:01
为什么要在提交前进行测试?我使用了PHPUnderControl和哈德森来自动化php“构建”..。基本上,他们运行一个ant/phing脚本,在每次提交(自动检测)之后运行自动测试(PHPUnit)和代码质量扫描器(包括PHPCS)。因此,它不会拒绝提交,但它会发送一封很好的电子邮件给任何人,您希望构建失败,并列出原因(特定行的违规代码).
发布于 2010-09-29 23:03:58
我们发现下面的方法很好,可以很好地平衡不费吹灰之力地获得代码的需求,但是可以防止与我们的标准不一致的版本。
首先,我们对承诺采取“开放武器”政策:
然后,我们有一个关于阶段/发布构建的“紧握拳头”策略:
所有这些都是通过phing使用phpcs (当然还有phpunit、phpdocumentor等)实现的。
发布于 2010-07-31 15:04:41
我认为ircmaxell有一个很好的地方--这种标准检查不应该出现在预提交钩子上,例如,在持续集成环境中或在紧要关头,提交后挂钩,并且应该基于提供信息而不是阻止提交!
考虑到这一点,我决定暂时采用选择不入的方法。我将svn预提交钩子配置为在提交消息中查找关键字,并在找到时运行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中)。其思想是,开发人员可以选择将关键字放在提交消息中,作为一种荣誉标记,但如果不适合提交,则不会强迫他们检查代码。
https://stackoverflow.com/questions/3373083
复制相似问题