diff options
author | snermolaev <[email protected]> | 2024-08-07 07:41:10 +0300 |
---|---|---|
committer | snermolaev <[email protected]> | 2024-08-07 07:55:09 +0300 |
commit | e9b0eaca4af5c9b51f48af4f8a24b5483b1e1fde (patch) | |
tree | f92737304b4dfb99e912b03124719e1558be9ef2 /build/scripts | |
parent | 0e66090a90e6a55094d0f535599682b4adc04046 (diff) |
collect .proto files by PROTO_DESCRIPTIONS
479e79ff20f8b8551bc8a5505eb740dc61e7a854
Diffstat (limited to 'build/scripts')
-rw-r--r-- | build/scripts/collect_rawproto.py | 37 | ||||
-rw-r--r-- | build/scripts/desc_rawproto_wrapper.py | 34 | ||||
-rw-r--r-- | build/scripts/merge_files.py | 4 | ||||
-rw-r--r-- | build/scripts/merge_protosrc.py | 39 |
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())) |