FossilRepo
Handle Fossil URI schemes in link rewriter (forum:, info:, wiki:)
Commit
671ba62f918b7f9e747dcba71cd4c2923f66df9d35281b351856f0074a10ed29
Parent
f713901f005b37d…
1 file changed
+17
-2
+17
-2
| --- fossil/views.py | ||
| +++ fossil/views.py | ||
| @@ -129,15 +129,30 @@ | ||
| 129 | 129 | # /forum -> forum |
| 130 | 130 | if url.startswith("/forumpost") or url.startswith("/forum"): |
| 131 | 131 | return f'href="{base}/forum/"' |
| 132 | 132 | # Keep external and unrecognized links as-is |
| 133 | 133 | return match.group(0) |
| 134 | + | |
| 135 | + def replace_scheme_link(match): | |
| 136 | + """Handle Fossil URI schemes like forum:/forumpost/HASH, wiki:PageName, info:HASH.""" | |
| 137 | + scheme = match.group(1) | |
| 138 | + path = match.group(2) | |
| 139 | + if scheme == "forum": | |
| 140 | + # forum:/forumpost/HASH -> our forum thread | |
| 141 | + m = re.match(r"/forumpost/([0-9a-f]+)", path) | |
| 142 | + if m: | |
| 143 | + return f'href="{base}/forum/{m.group(1)}/"' | |
| 144 | + elif scheme == "info": | |
| 145 | + return f'href="{base}/checkin/{path}/"' | |
| 146 | + elif scheme == "wiki": | |
| 147 | + return f'href="{base}/wiki/page/{path}"' | |
| 148 | + return match.group(0) | |
| 134 | 149 | |
| 135 | 150 | # Rewrite href="/..." links (internal Fossil paths) |
| 136 | 151 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 137 | - # Also rewrite href="/wiki?name=..." (markdown renders these with full path) | |
| 138 | - html = re.sub(r'href="(/wiki\?[^"]*)"', replace_link, html) | |
| 152 | + # Rewrite Fossil URI schemes: forum:/..., info:..., wiki:... | |
| 153 | + html = re.sub(r'href="(forum|info|wiki):([^"]*)"', replace_scheme_link, html) | |
| 139 | 154 | return html |
| 140 | 155 | |
| 141 | 156 | |
| 142 | 157 | def _get_repo_and_reader(slug): |
| 143 | 158 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 144 | 159 |
| --- fossil/views.py | |
| +++ fossil/views.py | |
| @@ -129,15 +129,30 @@ | |
| 129 | # /forum -> forum |
| 130 | if url.startswith("/forumpost") or url.startswith("/forum"): |
| 131 | return f'href="{base}/forum/"' |
| 132 | # Keep external and unrecognized links as-is |
| 133 | return match.group(0) |
| 134 | |
| 135 | # Rewrite href="/..." links (internal Fossil paths) |
| 136 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 137 | # Also rewrite href="/wiki?name=..." (markdown renders these with full path) |
| 138 | html = re.sub(r'href="(/wiki\?[^"]*)"', replace_link, html) |
| 139 | return html |
| 140 | |
| 141 | |
| 142 | def _get_repo_and_reader(slug): |
| 143 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 144 |
| --- fossil/views.py | |
| +++ fossil/views.py | |
| @@ -129,15 +129,30 @@ | |
| 129 | # /forum -> forum |
| 130 | if url.startswith("/forumpost") or url.startswith("/forum"): |
| 131 | return f'href="{base}/forum/"' |
| 132 | # Keep external and unrecognized links as-is |
| 133 | return match.group(0) |
| 134 | |
| 135 | def replace_scheme_link(match): |
| 136 | """Handle Fossil URI schemes like forum:/forumpost/HASH, wiki:PageName, info:HASH.""" |
| 137 | scheme = match.group(1) |
| 138 | path = match.group(2) |
| 139 | if scheme == "forum": |
| 140 | # forum:/forumpost/HASH -> our forum thread |
| 141 | m = re.match(r"/forumpost/([0-9a-f]+)", path) |
| 142 | if m: |
| 143 | return f'href="{base}/forum/{m.group(1)}/"' |
| 144 | elif scheme == "info": |
| 145 | return f'href="{base}/checkin/{path}/"' |
| 146 | elif scheme == "wiki": |
| 147 | return f'href="{base}/wiki/page/{path}"' |
| 148 | return match.group(0) |
| 149 | |
| 150 | # Rewrite href="/..." links (internal Fossil paths) |
| 151 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 152 | # Rewrite Fossil URI schemes: forum:/..., info:..., wiki:... |
| 153 | html = re.sub(r'href="(forum|info|wiki):([^"]*)"', replace_scheme_link, html) |
| 154 | return html |
| 155 | |
| 156 | |
| 157 | def _get_repo_and_reader(slug): |
| 158 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 159 |