赖勇浩(http://laiyonghao.com)

2012 年 2 月 22 日更新:保持文档与 0.1.2-r14 版本同步(变更部分使用蓝色#3333FF)。

2012 年 3 月 8 日更新:保持文档与 0.1.2-r16 版本同步(变更部分使用红色#CC0000)。

2012 年 4 月 28 日更新:保持文档与 0.1.3-r16 版本同步(变更部分使用深紫色#993399)。

2013 年 10 月 17 日更新:保持文档与 0.2.1-r20 版本同步(变更部分使用洋红色#FF6666)。

我们团队在开发《天下盛境》项目的时候,制定和执行了比较好的 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 项目修改、发布出来,方便大家使用。

首先感谢大家对 reviewboard-svn-hooks 的支持,在 0.1.0 版本发布后,很多朋友开始尝试使用,遇到了许多问题,也坚持不放弃,积极跟我沟通,提供非常详尽的出错信息,在此感谢你们!
0.1.2 版本找到了在 windows 下运行时出现 WindowsError[Error:6] 出错原因,并给出绕过的解决方案(见下文);找到了安装时没有创建配置文件的原因,并给出绕过的解决方案(见下文);增加了只要求 review 指定特性的文件的功能(如只 review src 目录下的文件)。

0.1.2 -r16 进一步增强了与 windows 的兼容性;同时 debug log 也标注上时间了;当 review_path 为空时,表示强制 review 所有的 svn 提交请求。

0.1.3-r16 取消了对 python2.6 的依赖,能够兼容 py2.5;修正了 review_path、experts 分切的错误。

升级

如果你是从 0.1.0 版本升级,需要注意事有两点:

  1. 请备份好 $CONFDIR/reviewboard-svn-hooks/conf.ini,升级后这个文件将被新文件覆盖,为避免你重新配置的麻烦,请先备份。
  2. $CONFDIR/rb-svn-hooks-used-rid.db 文件已经移到 $CONFDIR/reviewboard-svn-hooks/rb-svn-hooks-used-rid.db。所以升级后请手动把旧位置的 .db 文件移动到新位置。关于 $CONFDIR 的值,在 linux 系统下是 /etc,在 windows 下它的位置在 %ALLUSERSPROFILE% 环境变量所指定的值处。

从任何一个之前的版本升级,都需要使用上述方法备份好 conf.ini。

安装

因为 easy_install/pip 等自身的原因,直接使用 easy_install -U reviewboard-svn-hooks 进行安装或升级的时候,会出现沙盒错误。所以安装时请前往 http://pypi.python.org/pypi/reviewboard-svn-hooks 手动下载压缩文件,解压后进入 reviewboard-svn-hooks 目录执行以下命令来安装:

python setup.py install

配置

安装后,需要对 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 文件,解释如下:

[common]
# 是否记录 debugging 输出,0 为不输出,其它值为输出
debug = 0[reviewboard]
# reviewboard 的网址
# 如果使用的是目录,如 http://example.com/reviewboard/ 那请务必不要忘记最后的那个“/”
url=
# reviewboard 的用户名密码,这样才能够通过 http API 访问到 reviewboard 中的 review request 的状态
username=
password=[rule]
# 最少需要有几个 ship it
min_ship_it_count =
# 最少需要有几个专家 ship it
min_expert_ship_it_count =
# 专家的 reviewboard 用户名,使用半角逗号分格
experts =# ---------此处对 0.1.2-r16 有更新---------
# ---------此处对 0.1.2-r14 有更新---------
# 指定必须 review 的目录,半角逗号分隔,即如果所有改变的文件路径都不含其中的特性字符串,那就不检查 review 状态
# 默认为空,即表示强制 review 所有提交请求
# 例子: review_path = src, "cc/d,oc"
# 表示只有当改变的文件的路径中包含 src 或 cc/d,oc 目录时才要求 review,
# 关键路径中不能带有半角逗号review_path = # ---------此处对 0.2.1-r20 有更新---------
# 如果变更的文件全部在 ignore_path 里,则不会触发检测。ignore_path = 

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 $?

至此,配置就完成了。

windows

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

setlocal
set REPOS=%1
set TXN=%2
; ---------此处对 0.1.2-r16 有更新---------
; ---------此处对 0.1.2-r14 有更新---------
C:\python26\python.exe C:\python26\Scripts\strict_review-script.py %REPOS% %TXN%
exit %errorlevel%

记得把 C:\python26 这个目录替换为你本机上的 python 安装路径。至此,配置就完成了。

与已经使用过的 reviewboard 集成

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

# ---------此处对 0.1.2-r14 有更新---------init_used_rid_db $CONFDIR/reviewboard-svn-hooks/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 告诉我

强制 code review:reviewboard+svn 的方案相关推荐

  1. 5个开源且简单实用的Code Review工具

    更多内容关注微信公众号:fullstack888 Code Review中文应该译作"代码审查"或是"代码评审",这是一个流程,当开发人员写好代码后,需要让别人 ...

  2. 前端代码规范(1)谈code review

    前端谈code review 一.review代码的认知 1.code review目的 保证代码可读性,一致性 代码层面减少bug,最基本缺少控制判断.异常处理 传播知识+设计讨论. 相信很多人第一 ...

  3. 从零开始 Code Review,两年实战经验分享!

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 来源:http://t.cn/RtHE14S 前几天看了<Code Review 程序员的 ...

  4. 论新时代软件测试人员的工作之道(三)让Code Review常态化

    在百度,阿里等很多大型互联网公司,测试人员都会参与到code review中,我们团队也在去年开始开展起code review,为什么我们要这么做,首先老生常谈一下代码评审的诸多优点: 1. 通过大家 ...

  5. 有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)

    作者:覃超 链接:http://www.zhihu.com/question/19977889/answer/13539702 来源:知乎 平时就经常实践. 整个公司的code review就是使用这 ...

  6. 使用RBTool自动提交code review请求

    使用RBTool自动提交code review请求 前言 让我们回想一下手工提交review请求的过程: 首先得用 svn diff > filename.diff 生成diff文件. 然后输入 ...

  7. 工具的特性_16 个好用的 Code Review 工具

    作者 | Guru99 译者 | 刘雅梦 策划 | 小智 来源:GitHubDaily 原文链接:https://mp.weixin.qq.com/s/xwqVD69o6_qrgV0dxj_2aw C ...

  8. 作为开发人员,这四类Code Review方法你都知道吗?

    本文翻译自:https://dzone.com/articles/4-types-of-code-reviews-any-professional-developer 转载请注明出处:葡萄城官网,葡萄 ...

  9. Code Review的亲身实践

    Code Review,中文叫代码审查,指的是完成了部分功能的代码开发之后,在代码真正合并到仓库主分支之前,邀请同事帮你进行代码的审核和检查,检查代码的质量.规范.设计等等方面的过程. 代码审查的好处 ...

最新文章

  1. 剑指offer:面试题38. 字符串的排列
  2. java面试基础问题积累----多线程,并发
  3. did双重差分法_互助问答第252期:双重差分平行趋势检验等问题
  4. bzoj2875: [Noi2012]随机数生成器
  5. Python中if条件判断语句的用法!
  6. java springboot+maven发送邮件
  7. 【终极办法】windows下安装完MySQL,为什么cmd不识别命令?
  8. Spring Boot集成CKFinder
  9. STM32/STM8+DMX512协议
  10. 积分公式和常用方法总结
  11. 计算机毕业设计看这篇就够了(二)毕设流程
  12. lwj_C#_homework get set 属性
  13. 三维可视化常见的技术路线浅析
  14. 机器学习科普文章:“一文读懂机器学习,大数据/自然语言处理/算法全有了”
  15. 2019年最佳黑客书籍 - 初级到高级
  16. caj怎么转pdf?
  17. random.RandomState()用处
  18. PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算
  19. 转:乔布斯《遗失的访谈》全文:尘封16年的预见
  20. CSS 实现文本中间省略号

热门文章

  1. 删除iPhone邮箱smtp服务器,如何在 iPhone 上删除或清除邮件
  2. 基于Java毕业设计采购物料质量检验系统源码+系统+mysql+lw文档+部署软件
  3. 测试工作速记1 - 不要有被迫害妄想症
  4. 使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)
  5. AutoJs4.1.0实战教程---js文件打包发布成APK文件
  6. JUC之synchronized原理阶段三
  7. 【ShardingSphere-proxy +PostgreSQL实现读写分离(静态策略)】
  8. Java中Map集合的使用
  9. SAP 详细解析成本核算步骤
  10. 2400: Spoj 839 Optimal Marks