diff options
author | snermolaev <snermolaev@yandex-team.com> | 2024-07-30 06:29:24 +0300 |
---|---|---|
committer | snermolaev <snermolaev@yandex-team.com> | 2024-07-30 06:40:10 +0300 |
commit | eb0bb874facabf638050028b828cdba2b7c532bf (patch) | |
tree | 4851b4eaeb38cfec8c82e3f4aa1100ae27547812 /build/scripts/merge_protosrc.py | |
parent | ad85354eec8d2da678f47c5994997080f45cdb0a (diff) | |
download | ydb-eb0bb874facabf638050028b828cdba2b7c532bf.tar.gz |
collect .proto files by PROTO_DESCRIPTIONS
0727af35f2be899dfb58c5e49ed9cd1701be9066
Diffstat (limited to 'build/scripts/merge_protosrc.py')
-rw-r--r-- | build/scripts/merge_protosrc.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/build/scripts/merge_protosrc.py b/build/scripts/merge_protosrc.py new file mode 100644 index 0000000000..55e44c9063 --- /dev/null +++ b/build/scripts/merge_protosrc.py @@ -0,0 +1,39 @@ +import argparse +import os +import tarfile +import sys + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--output', required=True) + parser.add_argument('args', nargs='+') + return parser.parse_args() + + +def main(args): + peers = args.args + + compression_mode = '' + if args.output.endswith(('.tar.gz', '.tgz')): + compression_mode = 'gz' + elif args.output.endswith('.bzip2'): + compression_mode = 'bz2' + + files = set() + with tarfile.open(args.output, f'w:{compression_mode}') as dest: + for psrc in [p[:-len('.self.protodesc')]+'.protosrc' for p in peers if p.endswith('.self.protodesc')]: + with tarfile.open(psrc, 'r') as src: + for tarinfo in [m for m in src.getmembers() if m.name != '']: + if tarinfo.name in files: + continue + files.add(tarinfo.name) + if tarinfo.isdir(): + dest.addfile(tarinfo) + else: + dest.addfile(tarinfo, src.extractfile(tarinfo)) + return 0 + + +if __name__ == '__main__': + sys.exit(main(parse_args())) |