Mercurial > hg
changeset 20518:1e43f15a647f
template: add ifcontains template function
Adds a template function with the signature 'ifcontains(item, set, then[,
else])'. It can be used to do things like '{ifcontains('.hgignore',
file_mods, label(...), ...)}' to color commits that edit the .hgignore file.
A future patch will add the revset() function which will combine with
ifcontains to allow us to color commits if they are in the revset.
author | Durham Goode <durham@fb.com> |
---|---|
date | Tue, 11 Feb 2014 21:10:00 -0800 |
parents | 2158e8f3cbd2 |
children | cda9d2b6beab |
files | mercurial/templater.py tests/test-command-template.t |
diffstat | 2 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templater.py Thu Feb 13 17:34:09 2014 -0800 +++ b/mercurial/templater.py Tue Feb 11 21:10:00 2014 -0800 @@ -301,6 +301,19 @@ elif len(args) == 3: yield _evalifliteral(args[2], context, mapping) +def ifcontains(context, mapping, args): + if not (3 <= len(args) <= 4): + # i18n: "ifcontains" is a keyword + raise error.ParseError(_("ifcontains expects three or four arguments")) + + item = stringify(args[0][0](context, mapping, args[0][1])) + items = args[1][0](context, mapping, args[1][1]) + + if item in items: + yield _evalifliteral(args[2], context, mapping) + elif len(args) == 4: + yield _evalifliteral(args[3], context, mapping) + def ifeq(context, mapping, args): if not (3 <= len(args) <= 4): # i18n: "ifeq" is a keyword @@ -436,6 +449,7 @@ "fill": fill, "get": get, "if": if_, + "ifcontains": ifcontains, "ifeq": ifeq, "join": join, "label": label,
--- a/tests/test-command-template.t Thu Feb 13 17:34:09 2014 -0800 +++ b/tests/test-command-template.t Tue Feb 11 21:10:00 2014 -0800 @@ -1651,3 +1651,9 @@ $ hg log --template '{pad(rev, 20, "-", False)} {author|user}\n' 1------------------- test 0------------------- test + +Test ifcontains function + + $ hg log --template '{rev} {ifcontains("a", file_adds, "added a", "did not add a")}\n' + 1 did not add a + 0 added a