diff options
author | Eric Engestrom <eric@engestrom.ch> | 2020-09-25 21:19:10 +0200 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-09-30 09:29:00 +0000 |
commit | 636f770233543c00c319895201498c57eece6774 (patch) | |
tree | d5fc525f91042f76e692ee45da1e635850851057 /bin | |
parent | ae7975ecd43d769a31debb6190586bd2437a6f63 (diff) |
bin/gen_release_notes.py: escape special rST characters
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6869>
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/gen_release_notes.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/bin/gen_release_notes.py b/bin/gen_release_notes.py index 716f807b317..880161181a8 100755 --- a/bin/gen_release_notes.py +++ b/bin/gen_release_notes.py @@ -25,6 +25,7 @@ import asyncio import datetime import os import pathlib +import re import subprocess import sys import textwrap @@ -74,7 +75,7 @@ TEMPLATE = Template(textwrap.dedent("""\ ------------ %for f in features: - - ${f} + - ${rst_escape(f)} %endfor @@ -82,7 +83,7 @@ TEMPLATE = Template(textwrap.dedent("""\ --------- %for b in bugs: - - ${b} + - ${rst_escape(b)} %endfor @@ -91,15 +92,27 @@ TEMPLATE = Template(textwrap.dedent("""\ %for c, author_line in changes: %if author_line: - ${c} + ${rst_escape(c)} %else: - - ${c} + - ${rst_escape(c)} %endif %endfor """)) +def rst_escape(unsafe_str: str) -> str: + "Escape rST special chars when they follow or preceed a whitespace" + special = re.escape(r'`<>*_#[]|') + unsafe_str = re.sub(r'(^|\s)([' + special + r'])', + r'\1\\\2', + unsafe_str) + unsafe_str = re.sub(r'([' + special + r'])(\s|$)', + r'\\\1\2', + unsafe_str) + return unsafe_str + + async def gather_commits(version: str) -> str: p = await asyncio.create_subprocess_exec( 'git', 'log', '--oneline', f'mesa-{version}..', '--grep', r'Closes: \(https\|#\).*', @@ -249,6 +262,7 @@ async def main() -> None: header_underline=header_underline, previous_version=previous_version, vk_version=CURRENT_VK_VERSION, + rst_escape=rst_escape, )) except: print(exceptions.text_error_template().render()) |