phabricator强制进行code review的方法
admin
2023-02-21 18:00:10
0

1.拦截方式
强制进行code review,有两种方式:


将仓库托管在phabricator上,通过herald的方式来进行
在代码托管服务器上增加hook来实现
由于我们的代码托管到gitlab上,所有我们采用第二种方式进行code review

2.gitlab server端添加hook


gitlab添加hook的方式有两种:
    局部添加,作用于当前这个仓库
    全局添加,作用于全部仓库 

2.1 局部配置


cd /srv/gitlab/data/git-data/repositories/root/pipeline-example-go.git ###gitlab serve端进入到具体的仓库路径下
mkdir custom_hooks  #创建自定义hook目录
touch pre-receive   #创建pre-receive 文件
chmod 755 pre-receive #修改文件权限
pre-receive 钩子,在有人用 git push 向仓库推送代码时被执行,其内容如下:

#!/usr/bin/env python
import sys,os
import fileinput
import re
import json
import requests
def has_been_reviewed(start_commit, end_commit):
    cmd = 'git rev-list %s...%s' % (start_commit, end_commit,)
    Flag = False
    commits = os.popen(cmd).readlines()
    pattern = re.compile(r'Differential Revision: (.*)')
    for commit in commits:
        cmd = 'git rev-list --format=' + '%s%b ' + '--max-count=1 %s' % commit
        res  = os.popen(cmd).readlines()[-2]
        match_str = pattern.match(res)
        if not  match_str:
            print("Please use 'arc diff' to commit")
            continue
        http_url = match_str.group(1)
        url = "https://xxx/api/differential.query?api.token=*****"
        info = json.loads(requests.get(url).text)
        for i in info['result']:
            if i['uri'] != http_url: continue
            if i['statusName'] == 'Accepted':
                Flag = True
            else:
                print("Current Status: %s, Need Review and Accepted" % i['statusName'])
            break
    if Flag:
        sys.exit(0)
    else:
        sys.exit(1)

if __name__  == "__main__":
    for line in fileinput.input():
        args = line.split(' ')
    start_commit = args[0]
    end_commit = args[1]
    if start_commit != '0000000000000000000000000000000000000000' and  end_commit != '0000000000000000000000000000000000000000':
        has_been_reviewed(start_commit, end_commit)

代码解释:

1.git rev-list --format=%s%b  --max-count=1  ${commit_id} 
#获取git commit 的提交信息,默认git commit -m 后的信息,但是使用arc diff 之后,arc diff的信息会覆盖之前的git commit 的内容
2.requests.get("https://***/api/differential.query?api.token=***")
 #通过ph的api接口获取到所有的differential 信息,其中token 可通过https://***/conduit/login/ 获取
3.#获取differential的信息之后,选取uri为当前提交的revision,若状态Accepted,表示代码review通过,退出程序,返回状态码0,表示不拦截
4.#若获取状态不为Accepted,则返回状态码非0,表示执行失败,拦截git push请求

  ***

2.2 全局配置


1.开启gitlab的自定义hook参数
vim  /etc/gitlab/gitlab.rb   #配置如下 
gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks" 
 #取消这行注释,默认是注释
2.mkdir -p  /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d  # 创建目录
3.touch /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive  #创建文件pre-receive 
4.chmod 755 /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive 
5.pre-receive #文件内容如上
6.gitlab-ctl reconfigure  #重新加载gitlab的配置, 使配置生效

相关内容

热门资讯

产能被冻、损失五百亿,阿联酋“... 阿联酋正式退出欧佩克,令这个成立了60多年、对全球油价都有着决定性影响的海湾核心组织公开决裂。欧佩克...
煤气灶火焰调什么颜色才最佳 良好的燃烧器,火焰呈浅蓝色,火力旺盛,火苗高度大小均匀一致。煤气灶火焰调节方式:1、将灶阀开到最大。...
柏特燃气灶中间没火怎么办 当我们使用柏特燃气灶时,出现中间没有火的情况可能是由多种原因引起的。以下是一些常见的原因和解决方法:...
火王燃气灶右边灶头打不着火 1、没有燃气。打不着火的情况大部分都是没有气了或者天然气管道堵塞所导致的,或者突发情况导致燃气公司关...
厨房橱柜开太快导致炉子熄火怎么... 1、使用燃气灶时,不要将燃气灶的门关的过紧导致气流不流通,从而间接导致炉子熄火的现象频发。2、在橱柜...
天然气火没关,把阀门关了 天然气火没关,把阀门关了如果只是一次这样做,不会造成安全问题,但最好将燃气灶具开关关闭,如果灶具使用...
金建希案主审法官坠亡,揭开韩国... ·申宗旿(中)在主持庭审。(韩联社)这一事件无疑已成为观察韩国司法独立现状的重要切片。作者:刘 潇当...
赖清德“偷渡式”窜访斯威士兰,... 台湾地区领导人赖清德此前因有关国家拒绝发放包机飞行许可,窜访斯威士兰受挫。5月2日,赖清德偷偷钻进斯...
28.5亿元建的高标准农田,“... 设备未安装、泵房被废弃、水渠不通水、农田灌溉难……鄱阳县部分高标准农田建设的问题正凸显出来。据澎湃新...
风声丨3万元即可入刑,史上最严... 作者丨胡敏洁浙江大学光华法学院教授、法律与社会政策研究中心主任长期以来,医药购销领域的腐败问题,始终...