diff --git a/mercurial/parser.py b/mercurial/parser.py --- a/mercurial/parser.py +++ b/mercurial/parser.py @@ -135,8 +135,9 @@ def buildargsdict(trees, funcname, argsp raise error.ParseError(_("%(func)s takes at least %(nargs)d positional " "arguments") % {'func': funcname, 'nargs': len(poskeys)}) - if not varkey and len(trees) > len(poskeys) + len(keys): - raise error.ParseError(_("%(func)s takes at most %(nargs)d arguments") + if not varkey and kwstart > len(poskeys) + len(keys): + raise error.ParseError(_("%(func)s takes at most %(nargs)d positional " + "arguments") % {'func': funcname, 'nargs': len(poskeys) + len(keys)}) args = {} diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -454,7 +454,7 @@ keyword arguments 0 $ log 'extra(branch, a, b)' - hg: parse error: extra takes at most 2 arguments + hg: parse error: extra takes at most 2 positional arguments [255] $ log 'extra(a, label=b)' hg: parse error: extra got multiple values for keyword argument 'label'