FossilRepo
Rewrite external fossil-scm.org links to local views (forum, info, wiki)
Commit
80abf6da16039740fcbfa733921298d2478c4045488829cd4134d3a1667eb53b
Parent
b452cbefb7c7ed6…
1 file changed
+19
+19
| --- fossil/views.py | ||
| +++ fossil/views.py | ||
| @@ -242,10 +242,29 @@ | ||
| 242 | 242 | |
| 243 | 243 | # Rewrite href="/..." links (internal Fossil paths) |
| 244 | 244 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 245 | 245 | # Rewrite Fossil URI schemes: forum:/..., info:..., wiki:... |
| 246 | 246 | html = re.sub(r'href="(forum|info|wiki):([^"]*)"', replace_scheme_link, html) |
| 247 | + | |
| 248 | + # Rewrite external fossil-scm.org links to local views | |
| 249 | + def replace_external_fossil(match): | |
| 250 | + path = match.group(1) | |
| 251 | + # /forum/forumpost/HASH | |
| 252 | + m = re.match(r"/forum/forumpost/([0-9a-f]+)", path) | |
| 253 | + if m: | |
| 254 | + return f'href="{base}/forum/{m.group(1)}/"' | |
| 255 | + # /info/HASH | |
| 256 | + m = re.match(r"/info/([0-9a-f]+)", path) | |
| 257 | + if m: | |
| 258 | + return f'href="{base}/checkin/{m.group(1)}/"' | |
| 259 | + # /wiki/PageName | |
| 260 | + m = re.match(r"/wiki/(.+)", path) | |
| 261 | + if m: | |
| 262 | + return f'href="{base}/wiki/page/{m.group(1)}"' | |
| 263 | + return match.group(0) | |
| 264 | + | |
| 265 | + html = re.sub(r'href="https?://(?:www\.)?fossil-scm\.org(?:/home)?(/[^"]*)"', replace_external_fossil, html) | |
| 247 | 266 | return html |
| 248 | 267 | |
| 249 | 268 | |
| 250 | 269 | def _get_repo_and_reader(slug): |
| 251 | 270 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 252 | 271 |
| --- fossil/views.py | |
| +++ fossil/views.py | |
| @@ -242,10 +242,29 @@ | |
| 242 | |
| 243 | # Rewrite href="/..." links (internal Fossil paths) |
| 244 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 245 | # Rewrite Fossil URI schemes: forum:/..., info:..., wiki:... |
| 246 | html = re.sub(r'href="(forum|info|wiki):([^"]*)"', replace_scheme_link, html) |
| 247 | return html |
| 248 | |
| 249 | |
| 250 | def _get_repo_and_reader(slug): |
| 251 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 252 |
| --- fossil/views.py | |
| +++ fossil/views.py | |
| @@ -242,10 +242,29 @@ | |
| 242 | |
| 243 | # Rewrite href="/..." links (internal Fossil paths) |
| 244 | html = re.sub(r'href="(/[^"]*)"', replace_link, html) |
| 245 | # Rewrite Fossil URI schemes: forum:/..., info:..., wiki:... |
| 246 | html = re.sub(r'href="(forum|info|wiki):([^"]*)"', replace_scheme_link, html) |
| 247 | |
| 248 | # Rewrite external fossil-scm.org links to local views |
| 249 | def replace_external_fossil(match): |
| 250 | path = match.group(1) |
| 251 | # /forum/forumpost/HASH |
| 252 | m = re.match(r"/forum/forumpost/([0-9a-f]+)", path) |
| 253 | if m: |
| 254 | return f'href="{base}/forum/{m.group(1)}/"' |
| 255 | # /info/HASH |
| 256 | m = re.match(r"/info/([0-9a-f]+)", path) |
| 257 | if m: |
| 258 | return f'href="{base}/checkin/{m.group(1)}/"' |
| 259 | # /wiki/PageName |
| 260 | m = re.match(r"/wiki/(.+)", path) |
| 261 | if m: |
| 262 | return f'href="{base}/wiki/page/{m.group(1)}"' |
| 263 | return match.group(0) |
| 264 | |
| 265 | html = re.sub(r'href="https?://(?:www\.)?fossil-scm\.org(?:/home)?(/[^"]*)"', replace_external_fossil, html) |
| 266 | return html |
| 267 | |
| 268 | |
| 269 | def _get_repo_and_reader(slug): |
| 270 | """Return (project, fossil_repo, reader) or raise 404.""" |
| 271 |