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 的网址
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
在使用中根据实际情况,对代码做了某些调整,以符合自己的使用需要。