diff --git a/runbot/common.py b/runbot/common.py
index 82ea8926..df088500 100644
--- a/runbot/common.py
+++ b/runbot/common.py
@@ -133,6 +133,27 @@ def list_local_dbs(additionnal_conditions=None):
""" % additionnal_condition_str)
return [d[0] for d in local_cr.fetchall()]
+def markdown_escape(text):
+ patterns = {
+ r'\*\*(.+?)\*\*': '\\*\\*\\g<1>\\*\\*',
+ r'~~(.+?)~~': '\\~\\~\\g<1>\\~\\~',
+ r'__(.+?)__': '\\_\\_\\g<1>\\_\\_',
+ }
+
+ for p, b in patterns.items():
+ text = re.sub(p, b, text, flags=re.DOTALL)
+ return text
+
+def markdown_unescape(text):
+ patterns = {
+ r'\\\*\\\*': '**',
+ r'\\\~\\\~': '~~',
+ r'\\\_\\\_': '__',
+ }
+
+ for p, b in patterns.items():
+ text = re.sub(p, b, text, flags=re.DOTALL)
+ return text
def pseudo_markdown(text):
text = html_escape(text)
@@ -166,7 +187,7 @@ def pseudo_markdown(text):
return f'{codes[int(match.group(1))]}
'
text = Markup(re.sub(r'(\d+)
', code_replace, text, flags=re.DOTALL))
- return text
+ return markdown_unescape(text)
def _make_github_session(token):
diff --git a/runbot/models/build_config_codeowner.py b/runbot/models/build_config_codeowner.py
index 79da1cff..a79f1ed7 100644
--- a/runbot/models/build_config_codeowner.py
+++ b/runbot/models/build_config_codeowner.py
@@ -1,6 +1,6 @@
import re
from odoo import models, fields
-
+from odoo.addons.runbot.common import markdown_escape
class ConfigStep(models.Model):
_inherit = 'runbot.build.config.step'
@@ -124,10 +124,10 @@ class ConfigStep(models.Model):
for file, file_reviewers in reviewer_per_file.items():
href = 'https://%s/blob/%s/%s' % (commit_link.branch_id.remote_id.base_url, commit_link.commit_id.name, file.split('/', 1)[-1])
if file_reviewers:
- build._log('', 'Adding %s to reviewers for file [%s](%s)' % (', '.join(sorted(file_reviewers)), file, href), log_type='markdown')
+ build._log('', 'Adding %s to reviewers for file [%s](%s)' % (', '.join(sorted(file_reviewers)), markdown_escape(file), href), log_type='markdown')
reviewers |= file_reviewers
else:
- build._log('', 'No reviewer for file [%s](%s)' % (file, href), log_type='markdown')
+ build._log('', 'No reviewer for file [%s](%s)' % (markdown_escape(file), href), log_type='markdown')
if reviewers:
pr = pr_by_commit[commit_link]
diff --git a/runbot/tests/test_event.py b/runbot/tests/test_event.py
index a969741b..5761f705 100644
--- a/runbot/tests/test_event.py
+++ b/runbot/tests/test_event.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from .common import RunbotCase
-
+from odoo.addons.runbot.common import markdown_escape
class TestIrLogging(RunbotCase):
@@ -60,6 +60,19 @@ class TestIrLogging(RunbotCase):
'This link goes to somewhere and this one to nowhere.'
)
+ # test links with markdown like symbols
+ log.message = f'Adding validation to reviewers for file [{markdown_escape("foo/__init__.py")}](https://www.nowhere.com/)'
+ self.assertEqual(
+ log._markdown(),
+ 'Adding validation to reviewers for file foo/__init__.py'
+ )
+
+ log.message = f'~~{markdown_escape("foo/__init__.py")}~~'
+ self.assertEqual(
+ log._markdown(),
+ 'foo/__init__.py'
+ )
+
# test link with icon
log.message = '[@icon-download](https://wwww.somewhere.com) goes to somewhere.'
self.assertEqual(