phabricator强制进行代码评审的方法

  

1。拦截方式
强制进行代码检查,有两种方式:

<人力资源/>
 <代码>将仓库托管在phabricator上,通过先驱的方式来进行
  在代码托管服务器上增加钩来实现
  由于我们的代码托管到gitlab上,所有我们采用第二种方式进行代码评审代码 
<人力资源/>

2。gitlab服务器端添加钩

<人力资源/>
 <代码> gitlab添加钩的方式有两种:
  ,,局部添加,作用于当前这个仓库
  ,,全局添加,作用于全部仓库, 
<人力资源/>

2.1局部配置

<人力资源/>
 <代码> cd/电脑/gitlab/数据//根/pipeline-example-go git-data/存储库。git # # # gitlab服务端进入到具体的仓库路径下
  mkdir custom_hooks, #创建自定义钩目录
  触摸pre-receive,#创建pre-receive文件
  chmod 755 pre-receive #修改文件权限
  pre-receive 钩子,在有人用,git push 向仓库推送代码时被执行,其内容如下: 
<人力资源/>
 <代码> # !/usr/bin/env python
  导入系统,操作系统
  进口fileinput
  进口再保险
  进口json
  进口的要求
  def has_been_reviewed (start_commit end_commit):
  ,,cmd=& # 39; git rev-list % s…% & # 39;% (start_commit end_commit,)
  ,国旗=False
  ,,提交=os.popen (cmd) . readlines ()
  ,,模式=re.compile(" # 39;微分修正:(. *)& # 39;)
  ,的提交,提交:
  ,,,,cmd=& # 39; git rev-list——格式=& # 39;+ & # 39;% s % b & # 39;+ & # 39;——max-count=1% & # 39;%提交
  ,,,,res=os.popen (cmd) . readlines () [2]
  ,,,,match_str=pattern.match (res)
  ,,,,如果不是match_str:
  ,,,,,,打印(“请使用& # 39;弧diff # 39;commit")
  ,,,,,,继续
  ,,,,http_url=match_str.group (1)
  ,,,,url=癶ttps://xxx/api/differential.query?api.token=* * * * *”;
  ,,,,信息=json.loads (requests.get (url)。text)
  ,,,,我的信息[& # 39;结果# 39;):
  ,,,,,,如果我[& # 39;uri # 39;] !=http_url:继续
  ,,,,,,如果我[& # 39;statusName& # 39;]==& # 39;接受# 39;:
  ,,,,,,,国旗=True
  ,,,,,,其他的:
  ,,,,,,,,print(“目前状况:% s,需要审查和Accepted"我[% & # 39;statusName& # 39;])
  ,,,,,,打破
  ,,如果国旗:
  ,,,,sys.exit (0)
  ,,其他的:
  ,,,,sys.exit (1)
  
  if __name__,==癬_main__":
  ,的线,fileinput.input ():
  ,,,,arg游戏=line.split (& # 39;& # 39;)
  ,,start_commit=参数[0]
  ,,end_commit=参数[1]
  ,,如果start_commit !=& # 39; 0000000000000000000000000000000000000000 & # 39;和,end_commit !=& # 39; 0000000000000000000000000000000000000000 & # 39;:
  ,,,,has_been_reviewed (start_commit end_commit)  
<人力资源/>
 <代码>代码解释:
  
  1.git rev-list——格式=% s % b,——max-count=1, $ {commit_id}
  #获取git提交的提交信息,默认git commit - m后的信息,但是使用电弧diff之后,电弧diff的信息会覆盖之前的git提交的内容
  2. requests.get (“https://* * */api/differential.query ? api.token=* * *“)
  #通过ph值的api接口获取到所有的微分信息,其中令牌可通过https://* * */管道/登录/获取
  3 . #获取微分的信息之后,选取uri为当前提交的修改,若状态,表示代码审查通过,退出程序,返回状态码0,表示不拦截
  4.#若获取状态不为接受,则返回状态码非0,表示执行失败,拦截git push请求 

,, * * *

2.2全局配置

<人力资源/>
 <代码> 1。开启gitlab的自定义钩参数
  vim,/etc/gitlab/gitlab。rb,#配置如下
  gitlab_shell [& # 39; custom_hooks_dir& # 39;]=?opt/gitlab/嵌入式/服务/gitlab-shell/钩/custom_hooks"
  #取消这行注释,默认是注释
  2.mkdir - p,/opt/gitlab/嵌入式/服务/gitlab-shell//custom_hooks/pre-receive hook。d, #创建目录
  3.触摸/opt/gitlab/嵌入式/服务/gitlab-shell//custom_hooks/pre-receive hook。d/pre-receive, #创建文件pre-receive
  4.chmod 755/opt/gitlab/嵌入式/服务/gitlab-shell/钩/custom_hooks/pre-receive.d/pre-receive
  5.pre-receive #文件内容如上
  6.gitlab-ctl重新配置,#重新加载gitlab的配置,使配置生效 

  

phabricator强制进行代码评审的方法