我正在使用 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 <[email protected]>
Commit Message: my commit message
List of Files Changed:
['file1.yaml','file2.yaml']
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 不会在第一页返回最新提交。 我不知道后续页面是否会返回最新的提交。
有一个简单的方法可以做到这一点,使用 Bitbucket 分页机制。 就像这样: https://bitbucket.org/!api/2.0/repositories/xxxx/xxxx/commits?pagelen=1
通常您需要指定页码,“page=1”,但默认值为 1 所以...