我可以使用 Bitbucket API 获取存储库的最新提交吗?

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

我正在使用 Bitbucket API 来检索不同的信息。不过,我希望执行一个检索存储库最新提交的请求。我最初以为会这样完成:

https://bitbucket.org/!api/2.0/repositories/xxxx/xxxx/commits?limit=1

这只是正常显示所有提交,但我想显示最新的提交。通过查看 API 文档,我找不到任何有关限制要显示的提交数量的内容。所以想知道是否有人可以指出我正确的方向?

bitbucket-api
3个回答
2
投票

好吧,这也不是直截了当的,我花了几个小时寻找如何自己做到这一点。结果即使不是不幸,也是很容易的。简而言之,可用的 API 不会仅返回目标提交(如最新的提交)。你必须自己解析它。以下API:

"https://api.bitbucket.org/2.0/repositories/<project>/<repo>/commits/<branch>?limit=1"

仍将按顺序返回该特定分支的所有提交。因此,您可以简单地获取返回的第一页上的第一个结果,这是该分支的最新提交。这是一个基本的 Python 示例:

import os
import requests
import json

headers = {"Content-Type": "application/json"}
USER = ""
PASS = ""

def get_bitbucket_credentials():
    global USER, PASS
    USER = "<user>"
    PASS = "<pass>"


def get_commits(project, repo, branch):
    return json.loads(call_url("https://api.bitbucket.org/2.0/repositories/%s/%s/commits/%s?limit=1" % (project, repo, branch)))

def get_modified_files(url):
    data = json.loads(call_url(url))
    file_paths = []
    for value in data["values"]:
        file_paths.append(value["new"]["path"])
    return file_paths


def call_url(url):
    global USER, PASS
    response = requests.get(url, auth=(USER, PASS), headers=headers)
    if response.status_code == requests.codes.ok:
        return response.text
    return ""


if __name__ == "__main__":
    get_bitbucket_credentials()
    data = get_commits("<project>","<repo>","<branch>")
    for item in data["values"]:
        print("Author Of Commit: "+item["author"]["raw"])
        print("Commit Message: "+item["rendered"]["message"]["raw"])
        print("List of Files Changed:")
        print(get_modified_files(item["links"]["diff"]["href"].replace("/diff/","/diffstat/")))
        break

您可以运行上面的示例:

python3 mysavedfile.py

输出如下:

Author Of Commit: Persons Name <[email protected]>
Commit Message: my commit message

List of Files Changed:
['file1.yaml','file2.yaml']

2
投票

List Branches API 允许按最近修改的分支对分支进行排序。 限制为 1,它返回唯一返回分支的latestCommit 字段中的最新提交。

https://bitbucket.org/rest/api/1.0/projects/<project>/repos/<repo>/branches?orderBy=MODIFICATION&limit=1

这是上述请求的输出。

{
    "size": 1,
    "limit": 1,
    "isLastPage": false,
    "values": [
        {
            "id": "refs/heads/<branch>",
            "displayId": "<branch>",
            "type": "BRANCH",
            "latestCommit": "91d68b4a8fe349e7d1c48ea4da0ba4be8b260b45",
            "latestChangeset": "91d68b4a8fe349e7d1c48ea4da0ba4be8b260b45",
            "isDefault": false
        }
    ],
    "start": 0,
    "nextPageStart": 1
}

然后可以使用 Get Commit API 来获取提交的详细信息。

https://bitbucket.org/rest/api/1.0/projects/<project>/repos/<repo>/commits/<commit>

遗憾的是,List Commit API 不会在第一页返回最新提交。 我不知道后续页面是否会返回最新的提交。


0
投票

有一个简单的方法可以做到这一点,使用 Bitbucket 分页机制。 就像这样: https://bitbucket.org/!api/2.0/repositories/xxxx/xxxx/commits?pagelen=1

通常您需要指定页码,“page=1”,但默认值为 1 所以...

© www.soinside.com 2019 - 2024. All rights reserved.