# HG changeset patch # User Anton Shestakov # Date 1533791092 -28800 # Node ID 5caee9f923ae19baa74386fb0ac8ff50ab8e2669 # Parent c9e6ca31cfe7bed4903fa129b7d2598487d97c67 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. diff -r c9e6ca31cfe7 -r 5caee9f923ae mercurial/hgweb/webcommands.py --- 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 diff -r c9e6ca31cfe7 -r 5caee9f923ae tests/test-hgweb-commands.t --- 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)