github.com/vmware/go-vmware-nsxt@v0.0.0-20230223012718-d31b8a1ca05e/tools/goclone.py (about) 1 import re 2 import sys 3 4 def main(): 5 if len(sys.argv) != 6: 6 print("Usage: %s <filename> <func to replicate> <new func name> <replace what> <replace with>" % sys.argv[0]) 7 sys.exit(0) 8 9 filename = sys.argv[1] 10 func = sys.argv[2] 11 new_func = sys.argv[3] 12 what = sys.argv[4] 13 to = sys.argv[5] 14 15 with open(filename, 'r') as f: 16 lines = f.readlines() 17 18 lines_before_func = [] 19 lines_after_func = [] 20 bunch = [] 21 func_started = False 22 func_ended = False 23 for line in lines: 24 if func_ended: 25 lines_after_func.append(line) 26 continue 27 28 if line[:2] == '/*' and not func_started: 29 lines_before_func.extend(bunch) 30 bunch = [line] 31 else: 32 bunch.append(line) 33 34 if re.match("func .+ %s" % func, line): 35 func_started = True 36 37 if func_started and line[:1] == '}': 38 func_ended = True 39 40 41 output = lines_before_func 42 output.extend(bunch) 43 output.append('\n') 44 for line in bunch: 45 replaced = re.sub('\\b' + what + '\\b', to, line) 46 output.append(re.sub('\\b' + func + '\\b', new_func, replaced)) 47 48 output.extend(lines_after_func) 49 50 for line in output: 51 print(line[:-1]) 52 53 main()