統計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=50, 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
    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})
            
            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["branch"]=branch.name
                    pro["additions"]=com.stats["additions"]
                    pro["deletions"]=com.stats["deletions"]
                    pro["commitNum"]=com.stats["total"]                  
                    list2.append(pro)
                except :
                    print("有錯誤, 請檢查")

    return list2



def data():
    """
    數據去重
    key split
    """
    
    ret = {}
    
    for ele in get_gitlab():
        key = ele["projectName"]+ele["authorName"]+ele["branch"]
        if key not in ret:
            ret[key] = ele
            ret[key]["commitTotal"] = 1
        else:
            ret[key]["additions"] += ele["additions"]
            ret[key]["deletions"] += ele["deletions"]
            ret[key]["commitNum"] += ele["commitNum"]
            ret[key]["commitTotal"] +=1
 

   

    list1 = []
    for key,v in ret.items():
        v["項目名"] = v.pop("projectName")
        v["開發者"] = v.pop("authorName")
        v["分支"] = v.pop("branch")
        v["添加代碼行數"] = v.pop("additions")
        v["刪除代碼行數"] = v.pop("deletions")
        v["提交總行數"] = v.pop("commitNum")
        v["提交次數"] = v["commitTotal"]
        list1.append(v)
    print(list1)
    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")

 

    

結果:

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM