aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/re_replace.py
diff options
context:
space:
mode:
authordimdim11 <dimdim11@yandex-team.com>2024-03-28 09:05:38 +0300
committerdimdim11 <dimdim11@yandex-team.com>2024-03-28 09:17:05 +0300
commitf828a2a3fec6993c8ab442ede0fd5f4a617a78f2 (patch)
tree77c27c731f036840d858c9dcf2f97a88eced1b3b /build/scripts/re_replace.py
parent756c9e6e6908cb030ae418a0180e59e332bf1364 (diff)
downloadydb-f828a2a3fec6993c8ab442ede0fd5f4a617a78f2.tar.gz
Add vanilla_protobuf attribute and logic in cmake generator (patch by python)
Add vanilla_protobuf attribute and logic in cmake generator 0801b280e74126103f91b5cccf0fb16bdfddc492
Diffstat (limited to 'build/scripts/re_replace.py')
-rw-r--r--build/scripts/re_replace.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/build/scripts/re_replace.py b/build/scripts/re_replace.py
new file mode 100644
index 0000000000..02937103bc
--- /dev/null
+++ b/build/scripts/re_replace.py
@@ -0,0 +1,46 @@
+import sys
+import argparse
+import re
+
+# Usage: re_replace.py --from-re <REGEXP> --to-re <REGEXP_REPLACE> FILE [FILE ...]
+
+
+def patch_line(line: str, from_re: re.Pattern, to_re: str) -> str:
+ return re.sub(from_re, to_re, line)
+
+
+def main(args: list[str]):
+ argparser = argparse.ArgumentParser(allow_abbrev=False)
+ argparser.add_argument('--from-re', required=True)
+ argparser.add_argument('--to-re', required=True)
+ parsed_args, files = argparser.parse_known_args(args=args)
+ from_re = re.compile(parsed_args.from_re)
+ if not files:
+ raise Exception('No input files')
+
+ patched_files = []
+ skipped_files = []
+ for file in files:
+ patched = False
+ with open(file, 'r') as f:
+ lines = f.readlines()
+ for i in range(len(lines)):
+ line = lines[i]
+ patched_line = patch_line(line, from_re, parsed_args.to_re)
+ if patched_line != line:
+ patched = True
+ lines[i] = patched_line
+ if patched:
+ with open(file, 'w') as f:
+ f.writelines(lines)
+ patched_files.append(file)
+ else:
+ skipped_files.append(file)
+ if patched_files:
+ print("Patched by re_replace: " + ", ".join(patched_files))
+ if skipped_files:
+ print("Skipped by re_replace: " + ", ".join(skipped_files))
+
+
+if __name__ == '__main__':
+ main(sys.argv[1:])