aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/cpp_proto_wrapper.py
diff options
context:
space:
mode:
authordimdim11 <dimdim11@yandex-team.com>2024-04-23 06:00:00 +0300
committerdimdim11 <dimdim11@yandex-team.com>2024-04-23 06:17:10 +0300
commitc76106c22d7e333b13710b30d4ae3205d123bfef (patch)
tree443865ecd0f4b7bb7f20b895f0f0d5fad06fd896 /build/scripts/cpp_proto_wrapper.py
parentfd41af07c937014fe317735d72e86df25604812c (diff)
downloadydb-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.py43
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()))