飞云小侠的个人博客

欢迎你到这里来

« 显示文件的倒数XX行 | Main | webwork.properties的完整翻译 »

配置Subversion必须填写注释的脚本Hook
2006/05/14,02:10
你是否为了开发人员提交了一大堆内容,但是对修改了什么只字不提? 本文将减轻你的烦恼,当然不可能根除,填写内容的质量是没法检测的.

Subversion提供了一种叫做"Hook"的东西,当然对于开发人员来说这很熟悉的概念了.

Subversion提供的Hook支持多种语言/脚本,例如shell脚本,python,perl,exe等等

我们暂且不管其他步骤的Hook,我们只研究这个提交前的检测,在Subversion中叫做"pre-commit" ,默认Subversion提供了一些hook的模板,位于每个仓库的hooks目录下,打开模板可以看到默认提供了一些功能,按照自己的需要修改即可.

例如我的Subversion服务是用Apache做验证的,那么就需要去掉相关的验证.

为了用户用户,还需要加上自己的一些信息提示,告诉用户为什么不能提交成功.

默认的pre-commit部分内容是这样的:

  1. REPOS="$1"
  2. TXN="$2"
  3.  
  4. # Make sure that the log message contains some text.
  5. SVNLOOK=/app/subversion/bin/svnlook
  6. $SVNLOOK log -t "$TXN" "$REPOS" |
  7. grep "[a-zA-Z0-9]" > /dev/null || exit 1
  8.  
  9. # Check that the author of this commit has the rights to perform
  10. # the commit on the files and directories being modified.
  11. commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
  12.  
  13. # All checks passed, so allow the commit.
  14. exit 0

 

从pre-commit.tmpl的最上一行(这里没贴出),可以知道这个是shell脚本.

检测的步骤主要包括:

  • 提交的log里面必须包含ascii字符,对于英语国家来说,这足够了,但是对于中文用户来说,这个需要改
  • 没有给用户任何提示信息
  • 利用commit-access-control来检测权限控制,在这里我们不需要了

于是我们开始动手术,总之很简单吧,不过也遇到很多问题,几个主要关键点在于:

  • 提交的log必须要包含非空格字符
  • 报告给用户错误原因

我开始是这样写的:

  1. $SVNLOOK log -t "$TXN" "$REPOS" |
  2. egrep "[^[:space]]+" > /dev/null || (echo "You must input some comment" >&2;exit 1;)

 

可惜就是不知道为什么不行,总是提交成功,似乎 exit 1没有被执行.

最后改成了这样,更方便一点了,可以随意添加内容:

  1. #!/bin/sh
  2.  
  3. REPOS="$1"
  4. TXN="$2"
  5.  
  6. RES="OK"
  7.  
  8. # Make sure that the log message contains some text.
  9. SVNLOOK=/app/subversion/bin/svnlook
  10. $SVNLOOK log -t "$TXN" "$REPOS" | egrep "[^[:space:]]+" >/dev/null || unset RES
  11.  
  12. if [ "$RES" != "OK" ]
  13. then
  14. echo "You must input some comments for you commit" >&2
  15. exit 1
  16. fi
  17.  
  18. # All checks passed, so allow the commit.
  19. exit 0

 

把这个文件命名为pre-commit,放在仓库的hooks目录下,文件的拥有者为仓库目录的拥有者,改为可以执行的权限.

然后试试提交吧,写备注和不写备注,是否ok?

 

 

最新回复

windows 下面怎么弄呢,谢谢

Comment Icon Posted by: teli_eurydice at 2006/10/24, 17:33
 
Support by JavaScud