Gitlab API可以获取合并请求中的提交记录。

11

通过GITLAB API文档,我可以获取合并请求的详细信息, 从中可以获取源项目和分支。

获取分支的提交列表的api,可以列出该分支中的所有提交记录。

是否有一种方法可以通过API获取特定于合并请求的提交列表?

目标是仅了解合并请求中的新提交记录。

谢谢。

2个回答

8

谢谢。看起来这在最新的CE版本中是可用的。 - rupeshj
如果有人要使用这个答案。默认情况下,请求将仅返回20个提交。使用分页获取更多:https://docs.gitlab.com/ee/api/index.html#pagination - Nuzil

0
你可以使用 GitLab 的 Python 库。
gl = gitlab.Gitlab('https://xxx.xxx.com', private_token='xxx',api_version=4,ssl_verify=True)
gl.auth()
project = gl.projects.get(1233,lazy=True)

此外,类似以下的内容

def isValidfile(filepath):
  _, extension = os.path.splitext(filepath)
  if extension in ['.java','.go']: # lets do .ts later
    #print(filepath)
    return True
  return False
  
def get_commit_diff(project, commit_hash):
    commit = project.commits.get(commit_hash)
    diffs =[]
    for val in commit.diff(get_all=True):
      if isValidfile(val['new_path']):
         diffs.append(val)
         #print(val)
      #print(diffs)
    return diffs   

def getAllDiffs(project,mr_iid):
    mr = project.mergerequests.get(mr_iid)
    diffs = mr.diffs.list()
    vals = []
    for diff in diffs:
      commit =diff.attributes['head_commit_sha'] 
      vals.append(get_commit_diff(project,commit))
    return vals

def get_all_merge_requests(project):
    all_mrs = []
    page = 1
    while True:
        mrs = project.mergerequests.list(state='merged', target_branch="master", page=page, per_page=10)
        if not mrs:
            break
        all_mrs += mrs
        page += 1
        for mr in all_mrs:
          print("-------------------------------------------")
          print(mr.iid)
          print(mr.sha)
          print(mr.description)
          print(len(getAllDiffs(project,mr.iid)))
          print("-------------------------------------------")

        break
    return all_mrs 

更多细节请参见https://python-gitlab.readthedocs.io/en/stable/gl_objects/merge_requests.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接