diff --git a/mercurial/revsetlang.py b/mercurial/revsetlang.py --- a/mercurial/revsetlang.py +++ b/mercurial/revsetlang.py @@ -631,7 +631,10 @@ def formatspec(expr, *args): break ret.append(expr[pos:q]) pos = q + 1 - d = expr[pos] + try: + d = expr[pos] + except IndexError: + raise error.ParseError(_('incomplete revspec format character')) if d == '%': ret.append(d) pos += 1 @@ -644,7 +647,10 @@ def formatspec(expr, *args): if d == 'l': # a list of some type pos += 1 - d = expr[pos] + try: + d = expr[pos] + except IndexError: + raise error.ParseError(_('incomplete revspec format character')) ret.append(listexp(list(arg), d)) else: ret.append(argtype(d, arg)) 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 @@ -4097,6 +4097,12 @@ Invalid arguments passed to revset() $ hg log -T '{revset("%s", 0, 1)}\n' hg: parse error: too many revspec arguments specified [255] + $ hg log -T '{revset("%", 0)}\n' + hg: parse error: incomplete revspec format character + [255] + $ hg log -T '{revset("%l", 0)}\n' + hg: parse error: incomplete revspec format character + [255] Test files function