用Python统计GitLab上的代码提交行数
需要统计Gitlab上所有仓库、所有人的代码提交状况。
在网上找了找,发现基本上都是基于已经checkout到本地的统计,如果要统计服务器上所有仓库的,则没有现成的工具,所有我用Python写了一个。
放到GitHub上了:https://github.com/ccbuildpro/GitLabCommitStatics
一,核心思路
通过GitLab官方提供的API,基本可以得到如下流程:
获取所有Projects API->获取branch list->获取commit list->获取commit detail,再做汇总。
有几个注意点:
1,所有接口都需要access token
2,所有的列表接口,都是分页的
另外,这些接口都可以用postman来调一遍,或者直接在浏览器里访问
二,接口调用
获取仓库列表
1 | https://gitlab.example.com/api/v3/projects/all?private_token=%s&per_page=1000&page=%d&order_by=last_activity_at |
你需要填上gitlab的url、你的token、和page(也就是第几页)。
业务可以自己去填。
你需要把不符合要求的仓库过滤掉
获取分支列表
1 | https://gitlab.example.com/api/v4/projects/%s/repository/branches?private_token=%s' |
你需要填上gitlab的url、project id、你的token
获取单个分支的commit列表
1 | https://gitlab.example.com/api/v4/projects/%s/repository/commits?page=1&per_page=1000&ref_name=%s&since=%s&until=%s&private_token=%s |
你需要填上gitlab的url、project id、你的token,ref_name(分支名称)、since(其实日期)、until(截止日期)。
这两个日期都需要是“%Y-%m-%dT%H:%M:%S.%fZ
”的格式
获取单个commit的详情
1 | https://gitlab.example.com/api/v4/projects/%s/repository/commits/%s?private_token=%s |
你需要填上gitlab的url、project id、你的token。
三,需要注意
由于branch会相互merge,所以会造成重复统计,需要去重
另一个是,merge人和提交人不是同一个,有可能导致一份提交统计到两个人身上去了。
层层for循环进行http请求,如果不并行的话,时间非常长,所以要起子线程处理。