diff options
Diffstat (limited to 'build/docbook-set-revhistory.py')
-rwxr-xr-x | build/docbook-set-revhistory.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/build/docbook-set-revhistory.py b/build/docbook-set-revhistory.py new file mode 100755 index 0000000..8494ff0 --- /dev/null +++ b/build/docbook-set-revhistory.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# Rewrite the revhistory part of the document for vty reference (OS#4063) +import os +import shutil +import sys + +xml_in = sys.argv[1] +xml_out = os.environ["TEMPFILE"] +git_date = os.environ["GIT_DATE"] +revnumber = os.environ["REVNUMBER"] + + +def get_author_initials(line): + return line.split("<authorinitials>")[1].split("</authorinitials>")[0] + + +def write_revhistory_block(h_out, author_initials): + h_out.write("<revhistory>\n") + h_out.write("<revision>\n") + h_out.write(f"<revnumber>{revnumber}</revnumber>\n") + h_out.write(f"<date>{git_date}</date>\n") + h_out.write(f"<authorinitials>{author_initials}</authorinitials>\n") + h_out.write("<revremark>Automatically Generated VTY Reference</revremark>\n") + h_out.write("</revision>\n") + h_out.write("</revhistory>\n") + + +def set_revhistory(): + """ + Replace the part of the docbook that looks like the following, and copy + all other lines. Just using python's xml library would be better, but it + fails on docbook's custom DTDs. + <revhistory> + <revision> + <revnumber>v1</revnumber> + <date>18th September 2017</date> + <authorinitials>nh</authorinitials> + <revremark>Initial</revremark> + </revision> + </revhistory> + """ + before = 0 + inside = 1 + after = 2 + + pos = before + author_initials = "" + + with open(xml_out, "w") as h_out: + with open(xml_in, "r") as h_in: + for line in h_in.readlines(): + if pos == before: + if "<revhistory>" in line: + h_out.write(line.split("<revhistory>")[0] + "\n") + pos = inside + + if pos in [before, after]: + h_out.write(line) + + if pos == inside: + if "<authorinitials>" in line: + author_initials = get_author_initials(line) + if "</revhistory>" in line: + write_revhistory_block(h_out, author_initials) + h_out.write(line.split("</revhistory>")[1]) + pos = after + + +def main(): + if xml_in.endswith("-vty-reference.xml"): + print(f"Changing revhistory to {revnumber}, {git_date}...") + set_revhistory() + else: + print("Copying without change of revhistory...") + shutil.copyfile(xml_in, xml_out) + + +main() |