lts-mangle-change-log: Tool to post-process LTS changelogs

This script is used to account for differences between change log format
produced by NodeJS module "standard-version" and format actually used
by the TF-A LTS project.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
Change-Id: I2a824d5c75f087f7f289406ea24b9a753d8374bd
diff --git a/lts/lts-mangle-change-log.py b/lts/lts-mangle-change-log.py
new file mode 100644
index 0000000..e0e245d
--- /dev/null
+++ b/lts/lts-mangle-change-log.py
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# This script is used to account for differences between change log format
+# produced by NodeJS module "standard-version" and format actually used
+# by the TF-A LTS project.
+#
+import sys
+import re
+
+
+TAIL_RE = r"\(https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/\+/refs/tags/.+lts.+\) \(\d+-\d+-\d+\)$"
+PREFIX_RE = r"^## \[lts-[0-9.]+\]" + TAIL_RE
+NOPREFIX_RE = r"^###? \[[0-9.]+\]" + TAIL_RE
+
+
+def main():
+    with open(sys.argv[2]) as f:
+        for l in f:
+            if sys.argv[1] == "remove-prefix":
+                if re.match(PREFIX_RE, l):
+                    l = re.sub(r"\[lts-([0-9.]+)\]", r"[\1]", l)
+            elif sys.argv[1] == "add-prefix":
+                if re.match(NOPREFIX_RE, l):
+                    l = re.sub(r"\[([0-9.]+)\]", r"[lts-\1]", l)
+                    # stadard-version generates "###", while change-log.md uses "##"
+                    l = l.replace("### ", "## ")
+            else:
+                assert sys.argv[1], "'add-prefix' or 'remove-prefix' expected"
+            sys.stdout.write(l)
+
+
+if __name__ == "__main__":
+    main()