summaryrefslogtreecommitdiffstats
path: root/build/scripts
diff options
context:
space:
mode:
authorsnermolaev <[email protected]>2024-08-07 07:41:10 +0300
committersnermolaev <[email protected]>2024-08-07 07:55:09 +0300
commite9b0eaca4af5c9b51f48af4f8a24b5483b1e1fde (patch)
treef92737304b4dfb99e912b03124719e1558be9ef2 /build/scripts
parent0e66090a90e6a55094d0f535599682b4adc04046 (diff)
collect .proto files by PROTO_DESCRIPTIONS
479e79ff20f8b8551bc8a5505eb740dc61e7a854
Diffstat (limited to 'build/scripts')
-rw-r--r--build/scripts/collect_rawproto.py37
-rw-r--r--build/scripts/desc_rawproto_wrapper.py34
-rw-r--r--build/scripts/merge_files.py4
-rw-r--r--build/scripts/merge_protosrc.py39
4 files changed, 112 insertions, 2 deletions
diff --git a/build/scripts/collect_rawproto.py b/build/scripts/collect_rawproto.py
new file mode 100644
index 00000000000..92086b4f773
--- /dev/null
+++ b/build/scripts/collect_rawproto.py
@@ -0,0 +1,37 @@
+import argparse
+import os
+import tarfile
+import stat
+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):
+ rawprotos = args.args
+ with tarfile.open(args.output, 'w') as fout:
+ for rawproto in sorted(os.path.normpath(r).replace('\\', '/') for r in rawprotos):
+ assert rawproto.endswith('.rawproto')
+ arcname = os.path.splitext(rawproto[:-len('.rawproto')])[0]
+ with open(rawproto, 'rb') as fin:
+ tarinfo = fout.gettarinfo(rawproto, arcname)
+ tarinfo.mode = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH if tarinfo.mode | stat.S_IXUSR else 0
+ tarinfo.mode = (
+ tarinfo.mode | stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH
+ )
+ tarinfo.mtime = 0
+ tarinfo.uid = 0
+ tarinfo.gid = 0
+ tarinfo.uname = 'dummy'
+ tarinfo.gname = 'dummy'
+ fout.addfile(tarinfo, fin)
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(parse_args()))
diff --git a/build/scripts/desc_rawproto_wrapper.py b/build/scripts/desc_rawproto_wrapper.py
new file mode 100644
index 00000000000..2c7eb56bb26
--- /dev/null
+++ b/build/scripts/desc_rawproto_wrapper.py
@@ -0,0 +1,34 @@
+import argparse
+import shutil
+import subprocess
+import sys
+
+
+def parse_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--desc-output', required=True)
+ parser.add_argument('--rawproto-output', required=True)
+ parser.add_argument('--proto-file', required=True)
+ parser.add_argument('args', nargs='+')
+
+ return parser.parse_args()
+
+
+def main(args):
+ cmd = list(args.args)
+ cmd.append(f'--descriptor_set_out={args.desc_output}')
+ cmd.append(args.proto_file)
+
+ try:
+ subprocess.check_output(cmd, stdin=None, stderr=subprocess.STDOUT, text=True)
+ except subprocess.CalledProcessError as e:
+ sys.stderr.write(f'{e.cmd} returned non-zero exit code {e.returncode}.\n{e.output}\n')
+ return e.returncode
+
+ shutil.copyfile(args.proto_file, args.rawproto_output)
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(parse_args()))
diff --git a/build/scripts/merge_files.py b/build/scripts/merge_files.py
index d42d6a21392..7d52a56f0f0 100644
--- a/build/scripts/merge_files.py
+++ b/build/scripts/merge_files.py
@@ -2,7 +2,7 @@ import sys
if __name__ == "__main__":
- with open(sys.argv[1], "w") as f:
+ with open(sys.argv[1], "wb") as f:
for appended in sys.argv[2:]:
- with open(appended) as a:
+ with open(appended, "rb") as a:
f.write(a.read())
diff --git a/build/scripts/merge_protosrc.py b/build/scripts/merge_protosrc.py
new file mode 100644
index 00000000000..55e44c9063a
--- /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()))