diff --git a/mkp/__init__.py b/mkp/__init__.py index bec3233757a22b2e0dc4a5efca83d5abd54d88df..47586881528efb5d99ded55aa142cf54d4af6f12 100644 --- a/mkp/__init__.py +++ b/mkp/__init__.py @@ -81,9 +81,7 @@ def pack_to_bytes(info, path): _patch_info(info) bytes_io = io.BytesIO() with tarfile.open(fileobj=bytes_io, mode='w:gz') as archive: - info_data = encode_info(info) - tarinfo, fileobj = _create_tarinfo_and_buffer(info_data, 'info') - archive.addfile(tarinfo, fileobj=fileobj) + _add_to_archive(archive, 'info', encode_info(info)) for directory in _DIRECTORIES: files = info['files'].get(directory, []) @@ -91,8 +89,7 @@ def pack_to_bytes(info, path): continue directory_archive = _create_directory_archive(os.path.join(path, directory), files) - tarinfo, fileobj = _create_tarinfo_and_buffer(directory_archive, directory + '.tar') - archive.addfile(tarinfo, fileobj) + _add_to_archive(archive, directory + '.tar', directory_archive) return bytes_io.getvalue() @@ -110,6 +107,11 @@ def _create_directory_archive(path, files): return bytes_io.getvalue() +def _add_to_archive(archive, filename, data): + tarinfo, fileobj = _create_tarinfo_and_buffer(data, filename) + archive.addfile(tarinfo, fileobj=fileobj) + + def _create_tarinfo_and_buffer(data, filename): tarinfo = tarfile.TarInfo(filename) tarinfo.size = len(data)