在phabricator上实现强制code review有两种方式,一种是将仓库托管在phabricator上,通过herald的方式来进行,具体的实现方式可以参考 《phabricator - host repository模式下强制code review设置》;另一种是在代码托管服务器上增加hook来实现。本文主要对第二种方式进行讲解。
因为我们公司的代码目前用自己搭建的Gitlab管理,所以这里以Gitlab为例子
- 需要在Gitlab服务器上,对应的仓库目录下新建一个
custom_hooks
文件夹(仓库目录不是clone到本地的目录,是Gitlab服务器上的,最原始的) - 在文件夹中新建一个文件,名字为
pre-receive
- 修改文件的读写权限
chmod 755 pre-receive
- 修改文件的属主
chown git:git pre-receive
- 在
pre-receive
文件中加入对应的检查逻辑即可
脚本的思路就是取出本次提交的Revision信息,遍历commit message ,检查是否包含字符串 Reviewed By,包含的话则此次push提交成功,否则push失败。
另外,一开始有一个疑问,code review通过后如果改变本地的commit message,查了一些资料,发现arc amend
能够将phabricator服务器上的review信息同步到本地,在commit message中增加Reviewed By等内容。
参考资料: