使用GitLab API获取用户提交的列表

时间:2016-01-25 23:00:18

标签: gitlab

我可以使用此命令成功访问有关用户的信息:

curl http://gitlab.$INTERNAL_SERVER.com/api/v3/\
users/$USER_ID\?private_token\=$GITLAB_TOKEN

但是,我找不到API端点来获取用户推送到GitLab服务器的提交列表。是否存在包含此信息的网址?

3 个答案:

答案 0 :(得分:3)

据我所知,这样的API端点不存在。基本上我能想出的最好的就是这个流程:

  1. 找到用户参与的所有项目(本身并非100%简单)
  2. 然后获得该项目的提交
  3. 然后根据useremail过滤这些提交。
  4. 我正在使用java-gitlab-api来访问Gitlab服务器,所以不要轻松卷曲样本(抱歉!)。

答案 1 :(得分:0)

看起来您可以使用“事件”端点获取提交列表

data = requests.get(host + "/api/v4/users/{id}/events".format(id=user_id),
                                    params={"action": "pushed"})

您可以将params更新为

params.update({"before": before_date})

before date可能是数据中的最后一个元素,您可以连续循环以获取用户从特定日期开始的所有提交

答案 2 :(得分:0)

我写了一个Python脚本,该脚本执行@demaniak的建议。享受

import requests
import ujson as json
header ={...}
def get_all_commits_gitlab(project_id, username):
    json_loads_of_commit = []
    f_date = "2022-01-01T00:00:42.000+01:00"
    params = {"until": f_date}
    url_p = "https://gitlab.xxx.xx/api/v4/projects/%d/\
        repository/commits" % project_id
    r = requests.get(url_p, params, headers=header)
    c = 0
    while r.status_code == 200:
        jsLoad = json.loads(r.content)
        newDate = jsLoad[-1]["committed_date"]
        if (params["until"] == newDate):
            break
        user_commits = []
        for cm in jsLoad:
            if cm["author_name"] == username:
                user_commits.append(cm)
                c += 1
        json_loads_of_commit.append(user_commits)
        params["until"] = newDate
        r = requests.get(url_p, params, headers=header)
    print("project %d: %d commits by user %s, \
        the first one %s" % (project_id, c, username, newDate))
    return json_loads_of_commit