FossilRepo

Handle Fossil URI schemes in link rewriter (forum:, info:, wiki:)

lmata 2026-04-06 16:57 trunk
Commit 671ba62f918b7f9e747dcba71cd4c2923f66df9d35281b351856f0074a10ed29
1 file changed +17 -2
+17 -2
--- fossil/views.py
+++ fossil/views.py
@@ -129,15 +129,30 @@
129129
# /forum -> forum
130130
if url.startswith("/forumpost") or url.startswith("/forum"):
131131
return f'href="{base}/forum/"'
132132
# Keep external and unrecognized links as-is
133133
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)
134149
135150
# Rewrite href="/..." links (internal Fossil paths)
136151
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)
139154
return html
140155
141156
142157
def _get_repo_and_reader(slug):
143158
"""Return (project, fossil_repo, reader) or raise 404."""
144159
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button