Pre-commit集成配置

Pre-commit集成是在SVN版本库服务器上的,当svn commit时,通过读取svn commit时填写comment信息获得关联的review id号,然后从ReviewBoard服务器上获取该id的信息。根据预先配置的集成规则,判断此次svn commit是否允许。

安装

ReviewBoard基于python开发,因此访问ReviewBoard上的Review Request也需要使用python API,SVN服务器上必须安装Python。

然后再安装setuptools,安装后,需要在系统环境变量Path中添加Python运行环境的路径,如C:\Python27;C:\Python27\Script。

根据svn服务器上安装的python的package不同,需要安装下面3个Python 包:

ClientCookie-1.3.0.tar.gz

django-base64field-0.9.tar.gz

simplejson-3.3.0.tar.gz

最后,再安装集成使用的Package:reviewboard-svn-hooks-0.2.1-r20.zip。

这些Package的包安装,在未联网的情况下,可在解压出来的目录中运行命令:

python setup.py install

尤其是最后一个reviewboard-svn-hooks包,因为 easy_install/pip 等自身的原因,直接使用 easy_install -U reviewboard-svn-hooks 进行安装或升级的时候,会出现沙盒错误。所以安装时需要使用setup.py命令方式安装。

配置

安装后,需要对 reviewboard-svn-hook 项目进行配置。根据操作系统的不同,存储配置文件的目录也是不同的。在 linux 系统下,它的位置是在 /etc 下,在 windows 系统下,它的位置在 %ALLUSERSPROFILE% 目录下,也就是目录C:\Documents and Settings\All Users\reviewboard-svn-hooks,打开此目录下的配置文件config.ini,根据实际需要修改调整各项参数:

[common]

是否记录 debugging 输出,0 为不输出,其它值为输出,输出log文件在:

C:\Documents and #Settings\All Users\reviewboard-svn-hooks\debug.log

\etc\reviewboard-svn-hooks\debug.log Ubuntu下的log文件

debug=1

[reviewboard]

reviewboard 的网址

url=http://192.168.94.139/

reviewboard 的用户名,用于登录ReviewBoard服务器查询Review Request使用

username=admin

reviewboard 的用户密码

password=admin

[rule]

最少需要有几个 ship it

min_ship_it_count=2

最少需要有几个专家 ship it

min_expert_ship_it_count=0

专家的 reviewboard 用户名,使用半角逗号分格

experts=

软件PM用户名,使用半角逗号分格,PM提交代码时可不需要关联Review Request

softwarepms=yihui.hu

指定必须 review 的目录,半角逗号分隔,即如果所有改变的文件路径都不含其中的特性字符串,# 那就不检查 review 状态,默认为空,即表示强制 review 所有提交请求

例子: review_path = src, "cc/d,oc"

表示只有当改变的文件的路径中包含 src 或 cc/d,oc 目录时才要求 review,关键路径中不能带# 有半角逗号

review_path=

忽略Review的路径名,也就是如果如果改变的文件路径含其中的特性字符串,则需要经过Review

就可以提交

ignore_path=tags,"branches/sprd_develop"

相关权限设置:

debug.log文件需要设置为可读写,比如Owner设置为www-data,chmod 777;

conf.ini同样设置为www-data, 777权限(至少需要读权限);

/usr/local/bin/strict_review 需要可被脚本执行,有执行权限才能正常运行;

SVN hooks 配置

假定SVN 仓库目录的 $REPOS,并且从来没有设置过 SVN hooks。如果之前已经配置过 pre-commit,可将下面的脚本添加到现有的脚本中,调用 strict_review 应用程序。

  • linux

打开 $REPOS/hooks 目录,把 pre-commit.tmpl 改名为 pre-commit,记得加上执行权限。用文本编辑器打开 pre-commit 文件,把里面的内容全部删除掉,替换为下列内容:

REPOS="$1"

TXN="$2"

strict_review $REPOS $TXN

exit $?

对于已有的pre-commit脚本,可添加如下部分:

#

Check review request status

#

/usr/local/bin/strict_review $repos $txn;

if ($?){

die "$?";

exit $?;

}

报错信息提示

满足要求的review request会通过提交时的验证,否则可能会报错:

not enough of ship_it. 指定的review request id没有足够的ship_it;

No review id. 指定的review request id不存在;

HTTP Error 404: NOT FOUND,未指定review request id。

其中review request的id,通过在svn commit的message中输入review:\d+的方式指定。

其中增加对软件PM的判断,如果是软件PM提交,则可以不要求review request关联,为此在conf.ini中也做了相应调整。

在SVN的脚本运行中,可能会用到一些特定的路径下的执行程序,svn 1.8版本在每个Repo的conf目录下,有一个hooks-evn.tmpl模板文件,其中添加对应的Path变量,[default]下的Path对所有的hook都起作用,而[pre-commit]等hook下的PATH只对该hook起作用,使用此方法可以添加一些PATH,以保证hook能正常运行。该文件只有取消模板后缀tmpl后才能生效。

  • windows

打开 $REPOS/hooks 目录,把 pre-commit.tmpl 改名为 pre-commit.bat。用文本编辑器打开 pre-commit 文件,把里面的内容全部删除掉,替换为下列内容:

setlocal

set REPOS=%1

set TXN=%2

C:\python27\python.exe C:\python27\Scripts\strict_review-script.py %REPOS% %TXN%

exit %errorlevel%

记得把 C:\python27 这个目录替换为SVN服务器上的 python 安装路径。

由于Windows和Linux系统的差异,以及需要考虑对PM提交代码时的特殊处理,要更新脚本文件为:

与已经使用过的 reviewboard 集成

如果之前已经使用 ReviewBoard 做过若干次 code review,那么还有一步工作需要做:把之前使用过的 review request id 废掉。首先请找出并记下使用过的最大的 review request id,然后在命令行执行如下命令:

init_used_rid_db $CONFDIR/reviewboard-svn-hooks/rb-svn-hooks-used-rid.db \ $MAX_REQ_ID

其中 $CONFDIR 的值在上文已经提到,$MAX_REQ_ID 就是前面说的使用过的最大的 review request id。

注意:rb-svn-hooks-user-rid.db文件在运行命令前不存在,运行后会自动生成。

由于Review Request不能被重复使用,此命令的作用就在于标识以前所使用过的最大的Review Request id,以后集成Review Request id时必须比这个ID至少要大。

如果没有限制Review Request的重复使用,则可不必设置此项,同时需要修改strict_review.py脚本中的add_to_rid_db程序,不要调用该函数。

注意:

SVN和ReviewBoard的集成配置,由laiyonghao开发,具体参见网络上的配置说明:

http://blog.csdn.net/lanphaday/article/details/7162907

https://pypi.python.org/pypi/reviewboard-svn-hooks

在使用中根据实际情况,对代码做了某些调整,以符合自己的使用需要。