Mercurial > hg
changeset 13665:e798e430c5e5
revset: report a parse error if a revset is not parsed completely (issue2654)
author | Bernhard Leiner <bleiner@gmail.com> |
---|---|
date | Wed, 16 Mar 2011 23:09:14 +0100 |
parents | 53db4e2026ab |
children | c49cddce0a81 |
files | mercurial/commands.py mercurial/parser.py mercurial/revset.py mercurial/templater.py tests/test-revset.t |
diffstat | 5 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Wed Mar 16 18:48:59 2011 +0100 +++ b/mercurial/commands.py Wed Mar 16 23:09:14 2011 +0100 @@ -1237,7 +1237,7 @@ def debugrevspec(ui, repo, expr): '''parse and apply a revision specification''' if ui.verbose: - tree = revset.parse(expr) + tree = revset.parse(expr)[0] ui.note(tree, "\n") func = revset.match(expr) for c in func(repo, range(len(repo))):
--- a/mercurial/parser.py Wed Mar 16 18:48:59 2011 +0100 +++ b/mercurial/parser.py Wed Mar 16 23:09:14 2011 +0100 @@ -78,7 +78,9 @@ 'generate a parse tree from a message' self._iter = self._tokenizer(message) self._advance() - return self._parse() + res = self._parse() + token, value, pos = self.current + return res, pos def eval(self, tree): 'recursively evaluate a parse tree using node methods' if not isinstance(tree, tuple):
--- a/mercurial/revset.py Wed Mar 16 18:48:59 2011 +0100 +++ b/mercurial/revset.py Wed Mar 16 23:09:14 2011 +0100 @@ -823,7 +823,9 @@ def match(spec): if not spec: raise error.ParseError(_("empty query")) - tree = parse(spec) + tree, pos = parse(spec) + if (pos != len(spec)): + raise error.ParseError("invalid token", pos) weight, tree = optimize(tree, True) def mfunc(repo, subset): return getset(repo, subset, tree)
--- a/mercurial/templater.py Wed Mar 16 18:48:59 2011 +0100 +++ b/mercurial/templater.py Wed Mar 16 23:09:14 2011 +0100 @@ -69,7 +69,6 @@ else: raise error.ParseError(_("syntax error"), pos) pos += 1 - data[2] = pos yield ('end', None, pos) def compiletemplate(tmpl, context): @@ -91,8 +90,8 @@ parsed.append(("string", tmpl[pos:n])) pd = [tmpl, n + 1, stop] - parsed.append(p.parse(pd)) - pos = pd[2] + parseres, pos = p.parse(pd) + parsed.append(parseres) return [compileexp(e, context) for e in parsed]
--- a/tests/test-revset.t Wed Mar 16 18:48:59 2011 +0100 +++ b/tests/test-revset.t Wed Mar 16 23:09:14 2011 +0100 @@ -356,3 +356,10 @@ 9 $ log 'ancestors(8) and (heads(branch("-a-b-c-")) or heads(branch(é)))' 4 + +issue2654: report a parse error if the revset was not completely parsed + + $ log '1 OR 2' + hg: parse error at 2: invalid token + [255] +