--- a/mercurial/help/templates.txt Sat Feb 09 10:36:31 2013 +0000
+++ b/mercurial/help/templates.txt Sat Feb 09 10:40:26 2013 +0000
@@ -44,19 +44,21 @@
In addition to filters, there are some basic built-in functions:
+- date(date[, fmt])
+
+- fill(text[, width])
+
+- get(dict, key)
+
- if(expr, then[, else])
- ifeq(expr, expr, then[, else])
-- sub(pat, repl, expr)
-
- join(list, sep)
- label(label, expr)
-- date(date[, fmt])
-
-- fill(text[, width])
+- sub(pat, repl, expr)
Also, for any expression that returns a list, there is a list operator:
--- a/mercurial/hgweb/webcommands.py Sat Feb 09 10:36:31 2013 +0000
+++ b/mercurial/hgweb/webcommands.py Sat Feb 09 10:40:26 2013 +0000
@@ -89,6 +89,7 @@
author=fctx.user(),
date=fctx.date(),
desc=fctx.description(),
+ extra=fctx.extra(),
branch=webutil.nodebranchnodefault(fctx),
parent=webutil.parents(fctx),
child=webutil.children(fctx),
@@ -162,6 +163,7 @@
child=webutil.children(ctx),
changelogtag=showtags,
desc=ctx.description(),
+ extra=ctx.extra(),
date=ctx.date(),
files=files,
rev=ctx.rev(),
@@ -216,6 +218,7 @@
"child": webutil.children(ctx, i + 1),
"changelogtag": showtags,
"desc": ctx.description(),
+ "extra": ctx.extra(),
"date": ctx.date(),
"files": files,
"rev": i,
@@ -299,6 +302,7 @@
changesetbranch=showbranch,
author=ctx.user(),
desc=ctx.description(),
+ extra=ctx.extra(),
date=ctx.date(),
files=files,
diffsummary=lambda **x: webutil.diffsummary(diffstatgen),
@@ -531,6 +535,7 @@
parity=parity.next(),
author=ctx.user(),
desc=ctx.description(),
+ extra=ctx.extra(),
date=ctx.date(),
rev=i,
node=hn,
@@ -590,6 +595,7 @@
rev=ctx.rev(),
date=ctx.date(),
desc=ctx.description(),
+ extra=ctx.extra(),
author=ctx.user(),
rename=rename,
branch=webutil.nodebranchnodefault(ctx),
@@ -651,6 +657,7 @@
rev=ctx.rev(),
date=ctx.date(),
desc=ctx.description(),
+ extra=ctx.extra(),
author=ctx.user(),
rename=rename,
branch=webutil.nodebranchnodefault(ctx),
@@ -689,6 +696,7 @@
"rev": f.rev(),
"author": f.user(),
"desc": f.description(),
+ "extra": f.extra(),
"file": f.path(),
"targetline": targetline,
"line": l,
@@ -705,6 +713,7 @@
author=fctx.user(),
date=fctx.date(),
desc=fctx.description(),
+ extra=fctx.extra(),
rename=webutil.renamelink(fctx),
branch=webutil.nodebranchnodefault(fctx),
parent=webutil.parents(fctx),
@@ -770,6 +779,7 @@
"parent": webutil.parents(iterfctx),
"child": webutil.children(iterfctx),
"desc": iterfctx.description(),
+ "extra": iterfctx.extra(),
"tags": webutil.nodetagsdict(repo, iterfctx.node()),
"bookmarks": webutil.nodebookmarksdict(
repo, iterfctx.node()),
--- a/mercurial/templater.py Sat Feb 09 10:36:31 2013 +0000
+++ b/mercurial/templater.py Sat Feb 09 10:40:26 2013 +0000
@@ -207,6 +207,19 @@
f = context._filters[n]
return (runfilter, (args[0][0], args[0][1], f))
+def get(context, mapping, args):
+ if len(args) != 2:
+ # i18n: "get" is a keyword
+ raise error.ParseError(_("get() expects two arguments"))
+
+ dictarg = args[0][0](context, mapping, args[0][1])
+ if not util.safehasattr(dictarg, 'get'):
+ # i18n: "get" is a keyword
+ raise error.ParseError(_("get() expects a dict as first argument"))
+
+ key = args[1][0](context, mapping, args[1][1])
+ yield dictarg.get(key)
+
def join(context, mapping, args):
if not (1 <= len(args) <= 2):
# i18n: "join" is a keyword
@@ -285,11 +298,12 @@
}
funcs = {
+ "get": get,
"if": if_,
"ifeq": ifeq,
"join": join,
+ "label": label,
"sub": sub,
- "label": label,
}
# template engine