Mesa (master): bin/gen_release_notes.py: escape special rST characters

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 30 09:29:49 UTC 2020


Module: Mesa
Branch: master
Commit: 636f770233543c00c319895201498c57eece6774
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=636f770233543c00c319895201498c57eece6774

Author: Eric Engestrom <eric at engestrom.ch>
Date:   Fri Sep 25 21:19:10 2020 +0200

bin/gen_release_notes.py: escape special rST characters

Signed-off-by: Eric Engestrom <eric at engestrom.ch>
Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6869>

---

 bin/gen_release_notes.py | 22 ++++++++++++++++++----
 1 file 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())



More information about the mesa-commit mailing list