# HG changeset patch # User Yuya Nishihara # Date 1491220555 -32400 # Node ID d18b624c1c06779c72542d879829a718cb22ea71 # Parent 0926ca37a990b0ff8c899195c064b821cf34f70a templater: add parsing rule for key-value pair Based on the revset implementation, 70a2082f855a. This patch also adjusts the test as '=' is now a valid token. diff -r 0926ca37a990 -r d18b624c1c06 mercurial/templater.py --- a/mercurial/templater.py Mon Apr 03 20:44:05 2017 +0900 +++ b/mercurial/templater.py Mon Apr 03 20:55:55 2017 +0900 @@ -39,6 +39,7 @@ "/": (5, None, None, ("/", 5), None), "+": (4, None, None, ("+", 4), None), "-": (4, None, ("negate", 19), ("-", 4), None), + "=": (3, None, None, ("keyvalue", 3), None), ",": (2, None, None, ("list", 2), None), ")": (0, None, None, None, None), "integer": (0, "integer", None, None, None), @@ -56,7 +57,7 @@ c = program[pos] if c.isspace(): # skip inter-token whitespace pass - elif c in "(,)%|+-*/": # handle simple operators + elif c in "(=,)%|+-*/": # handle simple operators yield (c, None, pos) elif c in '"\'': # handle quoted templates s = pos + 1 @@ -462,6 +463,9 @@ return (runfilter, (args[0], f)) raise error.ParseError(_("unknown function '%s'") % n) +def buildkeyvaluepair(exp, content): + raise error.ParseError(_("can't use a key-value pair in this context")) + # dict of template built-in functions funcs = {} @@ -984,6 +988,7 @@ "|": buildfilter, "%": buildmap, "func": buildfunc, + "keyvalue": buildkeyvaluepair, "+": lambda e, c: buildarithmetic(e, c, lambda a, b: a + b), "-": lambda e, c: buildarithmetic(e, c, lambda a, b: a - b), "negate": buildnegate, diff -r 0926ca37a990 -r d18b624c1c06 tests/test-command-template.t --- a/tests/test-command-template.t Mon Apr 03 20:44:05 2017 +0900 +++ b/tests/test-command-template.t Mon Apr 03 20:55:55 2017 +0900 @@ -134,6 +134,18 @@ ('string', '\n')) -3 +Keyword arguments: + + $ hg debugtemplate -r0 -v '{foo=bar|baz}' + (template + (keyvalue + ('symbol', 'foo') + (| + ('symbol', 'bar') + ('symbol', 'baz')))) + hg: parse error: can't use a key-value pair in this context + [255] + Second branch starting at nullrev: $ hg update null @@ -2668,7 +2680,7 @@ hg: parse error at 2: unterminated string [255] - $ hg log -T '{"foo{date|=}"}' + $ hg log -T '{"foo{date|?}"}' hg: parse error at 11: syntax error [255]