mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
rendercomment: safer Flyspray task linkification
When an FS#123 is part of a code block, it must not be converted into a link. FS#123 may also appear inside an URL, in which case regular linkifaction of URLs must take precedence. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
199f34e42e
commit
127bb4c84c
2 changed files with 40 additions and 7 deletions
|
@ -29,18 +29,25 @@ class LinkifyExtension(markdown.extensions.Extension):
|
|||
md.inlinePatterns.add('linkify', processor, '_end')
|
||||
|
||||
|
||||
class FlysprayLinksPreprocessor(markdown.preprocessors.Preprocessor):
|
||||
_fsre = re.compile(r'\b(FS#(\d+))\b')
|
||||
_sub = r'[\1](https://bugs.archlinux.org/task/\2)'
|
||||
class FlysprayLinksInlineProcessor(markdown.inlinepatterns.InlineProcessor):
|
||||
"""
|
||||
Turn Flyspray task references like FS#1234 into links to bugs.archlinux.org.
|
||||
|
||||
def run(self, lines):
|
||||
return [self._fsre.sub(self._sub, line) for line in lines]
|
||||
The pattern's capture group 0 is the text of the link and group 1 is the
|
||||
Flyspray task ID.
|
||||
"""
|
||||
|
||||
def handleMatch(self, m, data):
|
||||
el = markdown.util.etree.Element('a')
|
||||
el.set('href', f'https://bugs.archlinux.org/task/{m.group(1)}')
|
||||
el.text = markdown.util.AtomicString(m.group(0))
|
||||
return el, m.start(0), m.end(0)
|
||||
|
||||
|
||||
class FlysprayLinksExtension(markdown.extensions.Extension):
|
||||
def extendMarkdown(self, md, md_globals):
|
||||
preprocessor = FlysprayLinksPreprocessor(md)
|
||||
md.preprocessors.add('flyspray-links', preprocessor, '_end')
|
||||
processor = FlysprayLinksInlineProcessor(r'\bFS#(\d+)\b',md)
|
||||
md.inlinePatterns.add('flyspray-links', processor, '_end')
|
||||
|
||||
|
||||
class GitCommitsInlineProcessor(markdown.inlinepatterns.InlineProcessor):
|
||||
|
|
|
@ -103,4 +103,30 @@ test_expect_success 'Test Git commit linkification.' '
|
|||
test_cmp actual expected
|
||||
'
|
||||
|
||||
test_expect_success 'Test Flyspray issue linkification.' '
|
||||
sqlite3 aur.db <<-EOD &&
|
||||
INSERT INTO PackageComments (ID, PackageBaseID, Comments, RenderedComment) VALUES (6, 1, "
|
||||
FS#1234567.
|
||||
*FS#1234*
|
||||
FS#
|
||||
XFS#1
|
||||
\`FS#1234\`
|
||||
https://archlinux.org/?test=FS#1234
|
||||
", "");
|
||||
EOD
|
||||
"$RENDERCOMMENT" 6 &&
|
||||
cat <<-EOD >expected &&
|
||||
<p><a href="https://bugs.archlinux.org/task/1234567">FS#1234567</a>.
|
||||
<em><a href="https://bugs.archlinux.org/task/1234">FS#1234</a></em>
|
||||
FS#
|
||||
XFS#1
|
||||
<code>FS#1234</code>
|
||||
<a href="https://archlinux.org/?test=FS#1234">https://archlinux.org/?test=FS#1234</a></p>
|
||||
EOD
|
||||
sqlite3 aur.db <<-EOD >actual &&
|
||||
SELECT RenderedComment FROM PackageComments WHERE ID = 6;
|
||||
EOD
|
||||
test_cmp actual expected
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Add table
Reference in a new issue