• 强制 code review:reviewboard+svn 的方案


    强制 code review:reviewboard+svn 的方案

    分类: Python 5965人阅读 评论(32) 收藏 举报
    赖勇浩(http://laiyonghao.com
    我们团队在开发《天下盛境》项目的时候,制定和执行了比较好的 code review 策略,总结下来有几个优点:一是代码风格可控,代码质量有一定提升;二是新员工入职后能够得到更多人的指导,成长非常快;三是小 bug 频出的情况比我做《天》之前的项目少了至少一个数量组。当时我们的 code review 策略是这样的:
    1. 使用 reviewboard 作为工具,通过 SVN hooks 强制每一次签入都是经过 review 的;
    2. 至少要有 2 个团队成员 ship it,才能够签入。
    3. ship it 的成员中,至少有一个是资深的团队成员。
    code review 是如此的有效,以至于我经常向朋友推荐,有一些朋友使用之后,觉得把 reviewboard 跟 SVN 结果起来还是蛮有挑战的,主要是编写 SVN hooks 还是需要学习不少东西,所以基本上他们都放弃了。今天我把 reviewboard-svn-hooks 项目修改、发布出来,方便大家使用。

    安装

    因为项目已经提交到 pypi(http://pypi.python.org/pypi/reviewboard-svn-hooks),所以简单地在命令行执行:
    1. easy_install reviewboard-svn-hooks  
    就可以安装成功了,安装时,可能需要管理员权限(linux/windows都可能需要)。

    配置

    安装后,需要对 reviewboard-svn-hook 项目进行配置。根据操作系统的不同,存储配置文件的目录也是不同的。在 linux 系统下,它的位置是在 /etc 下,在 windows 系统下,它的位置在 %ALLUSERSPROFILE% 目录下(具体指哪个目录,请参考http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows)。在本文中,以 $CONFDIR 指代之。打开 $CONFDIR/reviewboard-svn-hooks/conf.ini 文件,解释如下:
    1. [common]  
    2. # 是否记录 debugging 输出,0 为不输出,其它值为输出  
    3. debug = 0  
    4.   
    5. [reviewboard]  
    6. # reviewboard 的网址  
    7. url=  
    8. # reviewboard 的用户名密码,这样才能够通过 http API 访问到 reviewboard 中的 review request 的状态  
    9. username=  
    10. password=  
    11.   
    12. [rule]  
    13. # 最少需要有几个 ship it  
    14. min_ship_it_count =  
    15. # 最少需要有几个专家 ship it  
    16. min_expert_ship_it_count =  
    17. # 专家的 reviewboard 用户名,使用半角逗号分格  
    18. experts =  

    SVN hooks 配置

    假定你的 SVN 仓库目录的 $REPOS,并且从来没有设置过 SVN hooks。如果你之前已经配置过 pre-commit,请参考下述脚本自己想办法调用 strict_review 应用程序。

    linux

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

    1. REPOS="$1"  
    2. TXN="$2"  
    3. strict_review $REPOS $TXN  
    4. exit $?  

    至此,配置就完成了。

    windows

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

    1. setlocal  
    2. set REPOS=%1  
    3. set TXN=%2  
    4. strict_review "%REPOS%" "%TXN%"  
    5. exit %errorlevel%  

    至此,配置就完成了。

    与已经使用过的 reviewboard 集成

    如果你之前已经使用 reviewboard 做过若干次 code review,那么你还有一步工作需要做:把之前使用过的 review request id 废掉。首先请找出并记下你们使用过的最大的 review request id,然后在命令行执行如下命令:
    1. init_used_rid_db $CONFDIR/rb-svn-hooks-used-rid.db $MAX_REQ_ID  

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

    review 流程

    团队成员在提交代码之前,需要先使用 post-review 工具在 reviewboard 上创建一个 review request。一个配置良好的 reviewboard 能够自动发送邮件给所有成员,收到邮件通知后大家抽空去 review 代码,而 review 结果也会通过邮件知会给大家,所以发起 review 的同事能够即时了解到 review request  的状态。当收集到足够多的 ship it 时,他就能够向 SVN 提交变更了,唯一需要注意的事项是要在 log message 里写上符合正则表达式 r'review:([0-9]+)' 的信息,比如 review:199 表示这次提交的变更对应 ID 为 199 的 review request,当 strict_review 这个 hook 检测到 review request 199 符合预设的条件后,就会放行让变更进入仓库。

    其它

    最后,如果在使用中有任何问题,请到 http://code.google.com/p/reviewboard-svn-hooks/issues/list 提 issue 告诉我。
  • 相关阅读:
    使用jquery插件操作哈希表Hashtable的应用
    学用 ASP.Net 之 "字符串" (1): 基础
    敬告
    jQuery 练习[一]: 准备工作
    学用 ASP.Net 之 "字符串" (2): string.Format
    jQuery 练习[二]: 获取对象(1) 基本选择与层级
    学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
    jQuery 练习[二]: 获取对象(2) 定位子对象
    一个分割文本文件的小程序 回复 "jellyang" 的问题
    Delphi 7 类库继承关系表
  • 原文地址:https://www.cnblogs.com/SophiaTang/p/2356859.html
Copyright © 2020-2023  润新知