aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/merge_protosrc.py
diff options
context:
space:
mode:
authorsnermolaev <snermolaev@yandex-team.com>2024-07-30 06:29:24 +0300
committersnermolaev <snermolaev@yandex-team.com>2024-07-30 06:40:10 +0300
commiteb0bb874facabf638050028b828cdba2b7c532bf (patch)
tree4851b4eaeb38cfec8c82e3f4aa1100ae27547812 /build/scripts/merge_protosrc.py
parentad85354eec8d2da678f47c5994997080f45cdb0a (diff)
downloadydb-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.py39
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()))