Хорошо, это тоже было непросто, и я потратил пару часов на поиски того, как это сделать самому. Все закончилось легко, если не сказать печально. Проще говоря, доступный 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']
person
wesleywh
schedule
16.12.2020