的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好赶,谢谢! 我更新了片段 –