需求:根據時間段,統計各個研發提交的代碼行
實現邏輯:調用原生gitlab接口太復雜,引用python-gitlab 獲取commit詳情,然后進行統計
===============================================
簡單代碼
import gitlab client = gitlab.Gitlab('http://xxxxxx:8080/', private_token='ziKtexMN5Zfj37qRGLsW', timeout=5, api_version='4') client.auth() project = client.projects.list() for pro in project: print(pro) commits = pro.commits.list(since='2019-08-11T00:00:00Z', ref_name='dev') for c in commits: print(pro.commits.get(c.id))
返回結果:
python-gitlab api 文檔:https://python-gitlab.readthedocs.io/en/stable/gl_objects/commits.html
------------------2019.10.08 補充 踩坑---------------------
一、commit數量不對
如果不帶all=True,每個項目最多返回20個commit;沒注意看文檔,踩了坑;
如果想返回某個時間段的全部commit,應該如是寫:
commits = pro.commits.list(all=True, query_parameters={'since': '2019-09-01T00:00:00Z', 'ref_name': 'dev'})
二、merge導致重復統計
merge會自動生成一條commit,導致重復統計。接口好像沒有參數可以過濾,此處通過message來排除
for com in commits: c = pro.commits.get(com.id) if ('Merge' in c.message) and ('into dev' in c.message): print('跳過merge產生的commit:{},{}'.format(c.short_id, c.message)) else: # print('正常commit:{},{}'.format(c.short_id, c.message))
-------------- 2019年12月2日 踩坑--------------------
三、test 分支 commit數量明顯少很多
原因:增量拉取,只拉取昨天的commits;如果是merge N天的commits,那就會漏掉N-1天的數據
解決辦法:增量拉取前60天的commits