hgweb: avoid traceback when file or node parameters are missing
Previously, browsing to http://serv/diff would generate an internal
server error due to the file and node parameters being missing.
The same error also occurred for filelog, comparison and annotate.
--- a/mercurial/hgweb/webcommands.py Mon Jul 30 08:18:25 2012 +0200
+++ b/mercurial/hgweb/webcommands.py Mon Jul 30 11:02:10 2012 +0200
@@ -586,6 +586,8 @@
def comparison(web, req, tmpl):
ctx = webutil.changectx(web.repo, req)
+ if 'file' not in req.form:
+ raise ErrorResponse(HTTP_NOT_FOUND, 'file not given')
path = webutil.cleanpath(web.repo, req.form['file'][0])
rename = path in ctx and webutil.renamelink(ctx[path]) or []
--- a/mercurial/hgweb/webutil.py Mon Jul 30 08:18:25 2012 +0200
+++ b/mercurial/hgweb/webutil.py Mon Jul 30 11:02:10 2012 +0200
@@ -10,6 +10,8 @@
from mercurial import match, patch, scmutil, error, ui, util
from mercurial.i18n import _
from mercurial.node import hex, nullid
+from common import ErrorResponse
+from common import HTTP_NOT_FOUND
import difflib
def up(p):
@@ -154,11 +156,15 @@
return ctx
def filectx(repo, req):
+ if 'file' not in req.form:
+ raise ErrorResponse(HTTP_NOT_FOUND, 'file not given')
path = cleanpath(repo, req.form['file'][0])
if 'node' in req.form:
changeid = req.form['node'][0]
+ elif 'filenode' in req.form:
+ changeid = req.form['filenode'][0]
else:
- changeid = req.form['filenode'][0]
+ raise ErrorResponse(HTTP_NOT_FOUND, 'node or filenode not given')
try:
fctx = repo[changeid][path]
except error.RepoError: