首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phpcs (phpcs) --当使用svn预提交钩子时,如何允许重写?

phpcs (phpcs) --当使用svn预提交钩子时,如何允许重写?
EN

Stack Overflow用户
提问于 2010-07-30 15:41:52
回答 3查看 2.6K关注 0票数 2

我们有一个PHP5web应用程序,我们目前正在评估PHP CodeSniffer,以决定强制代码标准是否提高了代码质量。

我们使用颠覆作为代码存储库和部署库,我还添加了一个SVN 预提交钩,以确保提交的所有文件都不受编码标准气味的影响。钩子在技术上是有效的,但会导致太多的头痛实际上是有用的:

  1. 如果我们必须修复导致站点中断的紧急错误,我们最不需要的就是由于一些小的空格缩进问题而拒绝提交。
  2. 我们有很多遗留代码,有时会有数百个phpcs错误--现在修复这些文件中的所有phpcs错误是不实际的,。一个例子是一个文件中充满了没有doc评论的函数。另一个例子是,如果类名以小写字母开头,则抛出错误,但修复此错误可能涉及更改10、需要提交的20+文件(需要提交)、递归.
  3. 我们有一些文件有点大(例如4000行代码?)而phpcs需要几分钟来检查它们。把承诺拖延这么长时间是不能接受的。
  4. 我还没有测试这一点,但我想如果您执行svn分支并提交它,phpcs将检查所有的所有内容,并且需要很长时间来检查所有的1000个文件?

考虑到我们今天不能重构整个代码库--有人知道我如何使用svn提交参数来告诉svn预提交钩子不运行phpcs吗?

或者还有另外一种方法来消除所描述的头痛?

EN

回答 3

Stack Overflow用户

发布于 2010-07-30 15:48:01

为什么要在提交前进行测试?我使用了PHPUnderControl哈德森来自动化php“构建”..。基本上,他们运行一个ant/phing脚本,在每次提交(自动检测)之后运行自动测试(PHPUnit)和代码质量扫描器(包括PHPCS)。因此,它不会拒绝提交,但它会发送一封很好的电子邮件给任何人,您希望构建失败,并列出原因(特定行的违规代码).

票数 2
EN

Stack Overflow用户

发布于 2010-09-29 23:03:58

我们发现下面的方法很好,可以很好地平衡不费吹灰之力地获得代码的需求,但是可以防止与我们的标准不一致的版本。

首先,我们对承诺采取“开放武器”政策:

  • 所有代码,无论是否工作,是否符合,接受:只要它的提交日志消息有一个错误跟踪ID (预提交挂钩检查)
  • 鼓励频繁提交及其好处:协作、撤消、备份

然后,我们有一个关于阶段/发布构建的“紧握拳头”策略:

  • 如果有任何错误,即使是微不足道的,构建也会失败,这意味着:强制语法正确性、标准遵从性、代码文档以及所有测试都能顺利通过。
  • 防止释放任何问题。如果某个buggy确实通过了,那么它就是代码的问题和构建的问题(进程漏洞、测试不足等等)。

所有这些都是通过phing使用phpcs (当然还有phpunit、phpdocumentor等)实现的。

票数 2
EN

Stack Overflow用户

发布于 2010-07-31 15:04:41

我认为ircmaxell有一个很好的地方--这种标准检查不应该出现在预提交钩子上,例如,在持续集成环境中或在紧要关头,提交后挂钩,并且应该基于提供信息而不是阻止提交!

考虑到这一点,我决定暂时采用选择不入的方法。我将svn预提交钩子配置为在提交消息中查找关键字,并在找到时运行phpcs

在预提交钩子脚本中,例如/var/www/svn/repos/<reponame>/hooks/

代码语言:javascript
复制
#!/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中)。

其思想是,开发人员可以选择将关键字放在提交消息中,作为一种荣誉标记,但如果不适合提交,则不会强迫他们检查代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3373083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档