From dba860c733295ecf9183e8e20cabbfd6dfa67011 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Thu, 11 May 2023 15:36:43 +0200 Subject: [PATCH] VTY references: set git version and date Fix that VTY references currently don't have the version from which they were generated. Set the same REVNUMBER and GIT_DATE variables in Makefile.docbook.inc (gets included in Makefile.vty-rference.inc) as in Makefile.asciidoc.inc. Use them with a new script to rewrite the block of vty references. Closes: OS#4063 Change-Id: I68a8c3893d3c3a3b1bc1aee442a17635b60ac531 --- build/Makefile.docbook.inc | 17 ++++++- build/docbook-set-revhistory.py | 78 +++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) create mode 100755 build/docbook-set-revhistory.py diff --git a/build/Makefile.docbook.inc b/build/Makefile.docbook.inc index eb0ee25..eff6c66 100644 --- a/build/Makefile.docbook.inc +++ b/build/Makefile.docbook.inc @@ -34,9 +34,22 @@ INC_DIR ?= $(PWD)/generated %.xml-lint: %.xml xmllint --xinclude --postvalid --noout $< +GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags) +GIT_DATE := $(shell $(OSMO_GSM_MANUALS_DIR)/build/unix-time-to-fmt.py `git log -n 1 "--pretty=%at" ../.`) +ifeq (,$(BUILD_RELEASE)) + REVNUMBER := DRAFT $(GIT_VERSION) +else + REVNUMBER := $(GIT_VERSION) +endif + # Create a PDF file and lint it before # xslt path: find includes in both $(OSMO_GSM_MANUALS_DIR)/common/chapters and $(builddir)/generated %.pdf: %.xml %.xml-lint $(DOCBOOKS_DEPS) build common + set -x && \ + export GIT_DATE="$(GIT_DATE)" && \ + export REVNUMBER="$(REVNUMBER)" && \ + export TEMPFILE="$(INC_DIR)/_temp_$(notdir $<)" && \ + $(OSMO_GSM_MANUALS_DIR)/build/docbook-set-revhistory.py "$<" && \ dblatex --xslt-opts="--path $(realpath $(OSMO_GSM_MANUALS_DIR))/common/chapters:$(INC_DIR)" \ - $(dblatex_quiet) -P draft.mode=no -o $@ $< - + $(dblatex_quiet) -P draft.mode=no -o $@ "$$TEMPFILE" && \ + rm $$TEMPFILE 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("")[1].split("")[0] + + +def write_revhistory_block(h_out, author_initials): + h_out.write("\n") + h_out.write("\n") + h_out.write(f"{revnumber}\n") + h_out.write(f"{git_date}\n") + h_out.write(f"{author_initials}\n") + h_out.write("Automatically Generated VTY Reference\n") + h_out.write("\n") + h_out.write("\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. + + + v1 + 18th September 2017 + nh + Initial + + + """ + 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 "" in line: + h_out.write(line.split("")[0] + "\n") + pos = inside + + if pos in [before, after]: + h_out.write(line) + + if pos == inside: + if "" in line: + author_initials = get_author_initials(line) + if "" in line: + write_revhistory_block(h_out, author_initials) + h_out.write(line.split("")[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()