Приведенный ниже код дает мне только байты, которые изменены, но не весь файл.Что касается части s3, то создается zip-файл, но его размер равен нулю, тогда как фактический размер будет около 70-80 байтов.Мне нужен метод, где все файлы в хранилище будут помещены в s3, когда происходит событие push.по крайней мере, скажите мне, как получить все файлы из хранилища, когда даже происходит push.
Заранее спасибо!
import boto3
import pathlib
import tarfile
import io
import sys
import os
codecommit = boto3.client("codecommit")
def get_differences(repository_name, branch="master"):
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier='master',
)
differences = []
while "nextToken" in response:
response = codecommit.get_differences(
repositoryName=repository_name,
afterCommitSpecifier='master',
nextToken=response["nextToken"]
)
differences += response.get("differences", [])
else:
differences += response["differences"]
return differences
def main(event,context):
repository_name = event['Records'][0]['eventSourceARN'].split(':')[5]
repository_path = pathlib.Path(repository_name)
buf = io.BytesIO()
with tarfile.open(None, "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
s3 = boto3.client('s3')
s3.filename = str(repository_name)
s3.bucket = 'csharp-codes-codecommit'
response = s3.put_object(Bucket=s3.bucket,Key= '/tmp/'+str(repository_path))