使用python统计gitlab提交情况

目录

 背景

 思路

 实现


 背景

很多开发同学不及时提交代码,经常连续一周代码都没提交过,为了约束开发及时提交,以保证仓库的代码最新的,用统计gitlab(内部本地部署社区版)的提交记录来查看提交情况。

 思路

网上的方案大多是查询所有项目,然后把项目的提交记录一个个都抽出来统计。这样实现,查询的量很大(如果仓库里的项目很多,人员也很多的话),加上gitlab接口的限制,耗时很长。

但其中有一篇文章的思路不同,先查出人员,根据人员查事件,再根据事件统计提交信息。

本文就是节借鉴了这个思路。

定义出要统计的人员

gitlab有接口,返回所有的人员数据,/api/v4/users?active=true&private_token=sYrP-6xxxxxxxxx&per_page=100。本文为了方便,直接写死了要查询的人员列表。

查询事件列表

根据人员id及要查询的时间范围、事件类型查询push事件(/api/v4/users/32/events?private_token=sYrP-6xxxxxx&after=2023-09-17&before=2023-09-21&action=pushed

查询事件详情

根据返回的事件信息,项目id和时间id,查询commits信息(/api/v4/projects/2015/repository/commits/f5744a0bae9672c04824a9953d0c53d670ad191b?private_token=sYrP-6xxxxxxxx)

上一步返回的信息里包含一段stats,包含了代码增、删、合计的量:

 实现

import time
import requests
import json
from jsonpath import jsonpath

#定义开始时间和结束时间
stt_time='2023-09-17'
end_time='2023-09-25'
# gitlab里的id和姓名
userlist='[{"id": 294,"name": "张三"},{"id": 293,"name": "李四"}]'
#将uslerlist转为json
userJson=json.loads(userlist)

for row in userJson:
    #为防止接口限制,等待3秒
    time.sleep(3)
    # print(row['id'])
    # 根据用户id获取gitlab时间范围内的events
    eventsUrl='http://git地址xxx.com/api/v4/users/'+str(row['id'])+'/events?private_token=sYrP-68U9VncMzSYNusx&after='+stt_time+'&before='+end_time+'&action=pushed'
    events=requests.get(eventsUrl)
    json_data=json.loads(events.content)
    # projects=jsonpath(json_data,"$..project_id")
    # commits=jsonpath(json_data,"$..push_data.commit_to")
    i=1
    while i <= len(json_data):                     
        commitsUrl='http://git地址xxxx.com/api/v4/projects/'+str(jsonpath(json_data,"$..project_id")[i-1])+'/repository/commits/'+str(jsonpath(json_data,"$..push_data.commit_to")[i-1])+'?private_token=sYrP-68U9VncMzSYNusx'
        commits=requests.get(commitsUrl)
        commit_data=json.loads(commits.content)
        statsAdditions=jsonpath(commit_data,"$.stats.additions")
        statsDeletions=jsonpath(commit_data,"$.stats.deletions")
        statsTotal=jsonpath(commit_data,"$.stats.total")
        # print(statsAdditions[0])
        print(row['name'],"增加:",statsAdditions[0],"删除:",statsDeletions[0],"总:",statsTotal[0]) 
        i=i+1
            

输出结果如下 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值