GitLab API - 获取总体代码行数

问题描述 投票:0回答:2

我能够获取每次提交的统计信息(添加、删除、总计),但是如何获取总体#? 例如,如果一个 MR 有 30 次提交,我需要添加\删除的代码行数,您可以在右上角看到。 这个 # 不是每次提交的所有 # 的总和。 因此,我需要一个返回添加的代码行数的 API 在 MR 级别移除(无论提交了多少次)。 例如,如果我有 2 次提交:第一个添加了 10 行,第二个删除了完全相同的 10 行,那么 net # 为 0。


场景如下: 我有一个 30 次提交的 MR。 GitLab API 提供支持获取每次提交(单独)的统计信息(添加/删除的代码行)。 如果我进入 GitLab UI,转到 MR \ Changes,我会看到添加\删除的行数,这不是我通过 API 获取的所有提交统计信息的总和。 这是我的问题。 一个更简单的例子:假设我有 2 次提交,其中一次添加了 10 行代码,而第二次提交删除了完全相同的 10 行代码。使用 API,我得到了总和,即添加了 20 个 LOC。但是,如果我进入 GitLab UI \ Changes,它会显示 0(零),这是正确的;这是总体 chgs 的净值。这是我注意到的不一致之处。

api statistics gitlab
2个回答
6
投票

要对 MR 执行此操作,您可以使用 MR 更改 API 并计算

+
字段中以
-
changes[].diff
开头的行的出现次数,以分别获取添加和删除。

使用 bash 和 gitlab-org/gitlab-runner!3195 为例:

GITLAB_HOST="https://gitlab.com"
PROJECT_ID="250833"
MR_ID="3195"

URL="${GITLAB_HOST}/api/v4/projects/${PROJECT_ID}/merge_requests/${MR_ID}/changes"
DIFF=$(curl ${URL} | jq -r ".changes[].diff")
ADDITIONS=$(grep -E "^\+" <<< "$DIFF")
DELETIONS=$(grep -E "^\-" <<< "$DIFF")
NUM_ADDITIONS=$(wc -l <<< "$ADDITIONS")
NUM_DELETIONS=$(wc -l <<< "$DELETIONS")
echo "${MR_ID} has ${NUM_ADDITIONS} additions and ${NUM_DELETIONS} deletions"

输出是

3195 has 9 additions and 2 deletions

这与 UI 相匹配,也显示了 9 个添加和 2 个删除

GitLab-Runner MR 3195 diff UI

正如您所看到的,这是您所描述的场景的代表性示例,因为此 MR 中的个人提交的总和是 13 个添加和 6 个删除。


0
投票

由于 bash 示例,我没有立即理解 sytech 的解释。以下是 python 中的示例:

import requests

url = f"https://gitlab.example.com/api/v4/projects/{PROJECT_ID}/merge_requests/{MERGE_REQUEST_ID}/diffs"
headers = {"PRIVATE-TOKEN": "GITLAB_API_TOKEN"}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    diff_content = response.text

    additions = 0
    deletions = 0

    for line in diff_content.split("\n"):
        if line.startswith("+"):
            additions += 1
        elif line.startswith("-"):
            deletions += 1

    print(f"Added rows: {additions}, Deleted rows: ${deletions}")
else:
    print("Error")
© www.soinside.com 2019 - 2024. All rights reserved.