hgweb: catch ParseError that's raised by revset.match()
Some queries, like the demonstrated "first(::)", fail earlier than we call
mfunc(), and that results in a "500 Internal Server Error". To prevent it,
revset.match() also needs to be in a try-except block.
--- a/mercurial/hgweb/webcommands.py Fri Aug 03 15:09:19 2018 -0400
+++ b/mercurial/hgweb/webcommands.py Thu Aug 09 13:04:52 2018 +0800
@@ -276,9 +276,9 @@
if not funcsused.issubset(revset.safesymbols):
return MODE_KEYWORD, query
- mfunc = revset.match(web.repo.ui, revdef,
- lookup=revset.lookupfn(web.repo))
try:
+ mfunc = revset.match(web.repo.ui, revdef,
+ lookup=revset.lookupfn(web.repo))
revs = mfunc(web.repo)
return MODE_REVSET, revs
# ParseError: wrongly placed tokens, wrongs arguments, etc
--- a/tests/test-hgweb-commands.t Fri Aug 03 15:09:19 2018 -0400
+++ b/tests/test-hgweb-commands.t Thu Aug 09 13:04:52 2018 +0800
@@ -1227,6 +1227,16 @@
# Mode literal keyword search
+ $ get-with-headers.py $LOCALIP:$HGPORT 'log?rev=first(::)&style=raw'
+ 200 Script output follows
+
+
+ # HG changesets search
+ # Node ID cad8025a2e87f88c06259790adfa15acb4080123
+ # Query "first(::)"
+ # Mode literal keyword search
+
+
Revset query with foo-bar bookmark (issue5879)