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

标签 api rest bitbucket-api

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

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

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

最佳答案

好吧,这也不是直截了当的,我花了几个小时寻找如何自己做到这一点。结果即使不是不幸,也是很容易的。简而言之,可用的 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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="52223720213d3c373f333b3e12373f333b3e7c313d3f" rel="noreferrer noopener nofollow">[email protected]</a>>
Commit Message: my commit message

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

关于api - 我可以使用 Bitbucket API 获取存储库的最新提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64991055/

相关文章:

facebook - 为什么图谱 API 不返回标记用户的最新照片?

android - 如何在 android v2 map 上显示 map 比例尺

javascript - Ajax、重定向和删除

java - 使用reviewboard API创建新请求

java - 创建 GrizzlyHttpServer 时 MultiPartConfig 为 Null

git - 自动获取 pull 请求主题/主题

api - 构建 RESTful API - 处理 POST 请求和验证

javascript - Vimeo javascript api player.play() 不播放

jenkins - Bitbucket 拉取请求构建器插件不断触发相同的提交构建

git - 如何使用 Bitbucket REST API 删除分支