1. 程式人生 > 實用技巧 >統計gitlab程式碼倉庫開發人員程式碼貢獻數量

統計gitlab程式碼倉庫開發人員程式碼貢獻數量

1. 背景

快年底了,領導需要統計每個專案程式碼開發人員不定時間內的程式碼貢獻數, 並自動匯出Excel表。能快速知道哪些開發人員一天一天的在摸魚

2. 分析需求, 上程式碼開擼

# coding=utf-8
# author: zhangzihong

import time
import gitlab
import collections
import pandas as pd


gl = gitlab.Gitlab('http://code.xxx.com/gitlab',private_token='ve9ifEu9ZtAeqWik',timeout=5, api_version='4
') start_time = '2020-10-16T00:00:00Z' end_time = '2020-11-16T23:00:00Z' def get_gitlab(): """ gitlab API """ list2 = [] projects=gl.projects.list(owned=True,all=True) num=0 xnum=0 for project in projects: # 檢視所有的專案 num+=1 print("查看了%d個專案" %num)
for branch in project.branches.list(): # 檢視所有專案下的分支 commits=project.commits.list(all=True,query_parameters={'since': start_time,'until':end_time, 'ref_name': branch.name}) xnum+=1 print("統計了%d分支" %xnum) for commit in commits: com = project.commits.get(commit.id) pro
={} try: #print(project.path_with_namespace,com.author_name,com.stats["total"]) pro["projectName"]=project.path_with_namespace pro["authorName"]=com.author_name pro["commitNum"]=com.stats["total"] pro["branch"]=branch.name list2.append(pro) except : print("有錯誤, 請檢查") return list2 def data(): """ 資料去重 key split """ result = defaultdict(int) dic = {} for i in get_gitlab(): projectName = i['projectName'] authorName = i['authorName'] branch=i['branch'] result[f"{projectName}/{authorName}/{branch}"] = result[f"{projectName}/{authorName}/{branch}"] + 1 list1 = [] for k,v in result.items(): new={} b=k.split('/') new["專案組"]=b[0] new["專案名稱"]=b[1] new["開發者"]=b[2] new["分支"]=b[3] new["提交總數"]=v list1.append(new) return list1 def csv(csvName): """ csv """ df = pd.DataFrame(data(),columns=["專案組","專案名稱","開發者","分支","提交總數"]) df.to_csv(csvName,index=False,encoding="utf_8_sig") if __name__ == "__main__": csv("./gitlab.csv")

結果: