的latest版本boto3 codecommit
包括方法get_differences
和get_blob
。 您可以使用這兩種方法獲取codecommit存儲庫的所有內容(至少,如果您對保留.git歷史記錄不感興趣)。
下面的腳本獲取主分支的所有內容並將其添加到tar文件中。之後,您可以隨意將其上傳至s3。 您可以將其作爲lambda函數運行,當您推送到codecommit時可以調用它。
這適用於當前lambda python 3.6 environment。 botocore==1.5.89
boto3==1.4.4
import boto3
import pathlib
import tarfile
import io
import sys
def get_differences(repository_name, branch="master"):
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier=branch,
)
differences = []
while "nextToken" in response:
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier=branch,
nextToken=response["nextToken"]
)
differences += response.get("differences", [])
else:
differences += response["differences"]
return differences
if __name__ == "__main__":
repository_name = sys.argv[1]
codecommit = boto3.client("codecommit")
repository_path = pathlib.Path(repository_name)
buf = io.BytesIO()
with tarfile.open(None, mode="w:gz", fileobj=buf) as tar:
for difference in get_differences(repository_name):
blobid = difference["afterBlob"]["blobId"]
path = difference["afterBlob"]["path"]
mode = difference["afterBlob"]["mode"] # noqa
blob = codecommit.get_blob(
repositoryName=repository_name, blobId=blobid)
tarinfo = tarfile.TarInfo(str(repository_path/path))
tarinfo.size = len(blob["content"])
tar.addfile(tarinfo, io.BytesIO(blob["content"]))
tarobject = buf.getvalue()
# save to s3
對不起,不應'afterCommitSpecifier ='master''與'afterCommitSpecifier = branch'在'get_differences'取代? – RomaValcer
@RomaValcer好趕,謝謝! 我更新了片段 –