diff options
author | dimdim11 <dimdim11@yandex-team.com> | 2024-04-23 06:00:00 +0300 |
---|---|---|
committer | dimdim11 <dimdim11@yandex-team.com> | 2024-04-23 06:17:10 +0300 |
commit | c76106c22d7e333b13710b30d4ae3205d123bfef (patch) | |
tree | 443865ecd0f4b7bb7f20b895f0f0d5fad06fd896 /build/scripts/cpp_proto_wrapper.py | |
parent | fd41af07c937014fe317735d72e86df25604812c (diff) | |
download | ydb-c76106c22d7e333b13710b30d4ae3205d123bfef.tar.gz |
Remove final in cpp pb.h/cc by outputs list
Remove final in cpp pb.h/cc by outputs list
1307ef1d33bab92f478e7a4d213c08bf6691ebd5
Diffstat (limited to 'build/scripts/cpp_proto_wrapper.py')
-rw-r--r-- | build/scripts/cpp_proto_wrapper.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/build/scripts/cpp_proto_wrapper.py b/build/scripts/cpp_proto_wrapper.py new file mode 100644 index 0000000000..8cc4ccc1be --- /dev/null +++ b/build/scripts/cpp_proto_wrapper.py @@ -0,0 +1,43 @@ +import sys +import os +import subprocess +import re +import argparse + + +FROM_RE = re.compile("((?:struct|class)\s+\S+\s+)final\s*:") +TO_RE = "\\1:" + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument('--outputs', nargs='+', required=True) + parser.add_argument('subcommand', nargs='+') + return parser.parse_args() + + +def patch_proto_file(text: str) -> tuple[str, int]: + return re.subn(FROM_RE, TO_RE, text) + + +def main(namespace: argparse.Namespace) -> int: + try: + subprocess.check_output(namespace.subcommand, stdin=None, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + sys.stderr.write( + '{} returned non-zero exit code {}.\n{}\n'.format(' '.join(e.cmd), e.returncode, e.output.decode('utf-8')) + ) + return e.returncode + + for output in namespace.outputs: + with open(output, 'r') as f: + patched_text, num_patches = patch_proto_file(f.read()) + if num_patches: + with open(output, 'w') as f: + f.write(patched_text) + + return 0 + + +if __name__ == '__main__': + sys.exit(main(parse_args())) |