]> git.proxmox.com Git - mirror_frr.git/blob - tools/fixup-deprecated.py
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / tools / fixup-deprecated.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # SPDX-License-Identifier: NONE
4 #
5 # Script used to replace deprecated quagga/frr mactors/types/etc.
6 #
7 # loosly based on indent.py, 2017 by David Lamparter
8 # 2018 by Lou Berger, placed in public domain
9
10 import sys, re, subprocess, os
11
12
13 class replaceEntry:
14 compiled = None # compiled regex
15 repl = None # regex
16
17 def __init__(self, c, r):
18 self.compiled = c
19 self.repl = r
20
21
22 rList = [
23 # old #define VNL, VTYNL, VTY_NEWLINE
24 replaceEntry(re.compile(r"(VNL|VTYNL|VTY_NEWLINE)"), r'"\\n"'),
25 # old #define VTY_GET_INTEGER(desc, v, str)
26 # old #define VTY_GET_INTEGER_RANGE(desc, v, str, min, max)
27 # old #define VTY_GET_ULONG(desc, v, str)
28 replaceEntry(
29 re.compile(
30 r"(VTY_GET_INTEGER(_RANGE|)|VTY_GET_ULONG)[\s\(]*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)(\s*|)(\)|,).*?;",
31 re.M | re.S,
32 ),
33 r"(\4) = strtoul((\5), NULL, 10);\t/* \3 */",
34 ),
35 # old #define VTY_GET_ULL(desc, v, str)
36 replaceEntry(
37 re.compile(
38 r"VTY_GET_ULL[\s\(]*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)(\s*|)(\)|,).*?;",
39 re.M | re.S,
40 ),
41 r"(\2) = strtoull((\3), NULL, 10);\t/* \1 */",
42 ),
43 # old #define VTY_GET_IPV4_ADDRESS(desc, v, str)
44 replaceEntry(
45 re.compile(
46 r"VTY_GET_IPV4_ADDRESS[\s\(]*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)(\s*|)(\)|,).*?;",
47 re.M | re.S,
48 ),
49 r"inet_aton((\3), &(\2));\t/* \1 */",
50 ),
51 # old #define VTY_GET_IPV4_PREFIX(desc, v, str)
52 replaceEntry(
53 re.compile(
54 r"VTY_GET_IPV4_PREFIX[\s\(]*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)(\s*|)(\)|,).*?;",
55 re.M | re.S,
56 ),
57 r"str2prefix_ipv4((\3), &(\2));\t/* \1 */",
58 ),
59 # old #define vty_outln(vty, str, ...)
60 replaceEntry(
61 re.compile(r'vty_outln[\s\(]*(.*?)\s*,\s*(".*?"|.*?)\s*(\)|,)', re.M | re.S),
62 r'vty_out(\1, \2 "\\n"\3',
63 ),
64 ]
65
66
67 def fixup_file(fn):
68 with open(fn, "r") as fd:
69 text = fd.read()
70
71 for re in rList:
72 text = re.compiled.sub(re.repl, text)
73
74 tmpname = fn + ".fixup"
75 with open(tmpname, "w") as ofd:
76 ofd.write(text)
77 os.rename(tmpname, fn)
78
79
80 if __name__ == "__main__":
81 for fn in sys.argv[1:]:
82 fixup_file(fn)