diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -120,12 +120,12 @@ def tokenize(program, start, end): yield ('symbol', sym, s) pos -= 1 elif c == '}': - pos += 1 - break + yield ('end', None, pos + 1) + return else: raise error.ParseError(_("syntax error"), pos) pos += 1 - yield ('end', None, pos) + raise error.ParseError(_("unterminated template expansion"), start) def _parsetemplate(tmpl, start, stop): parsed = [] diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -2513,6 +2513,10 @@ Error on syntax: abort: t:3: unmatched quotes [255] + $ hg log -T '{date' + hg: parse error at 1: unterminated template expansion + [255] + Behind the scenes, this will throw TypeError $ hg log -l 3 --template '{date|obfuscate}\n'