Show More
@@ -545,10 +545,20 b' def date(context, mapping, args):' | |||
|
545 | 545 | # i18n: "date" is a keyword |
|
546 | 546 | raise error.ParseError(_("date expects a date information")) |
|
547 | 547 | |
|
548 | @templatefunc('dict([key=value...])', argspec='**kwargs') | |
|
548 | @templatefunc('dict([[key=]value...])', argspec='*args **kwargs') | |
|
549 | 549 | def dict_(context, mapping, args): |
|
550 |
"""Construct a dict from key-value pairs. |
|
|
550 | """Construct a dict from key-value pairs. A key may be omitted if | |
|
551 | a value expression can provide an unambiguous name.""" | |
|
551 | 552 | data = util.sortdict() |
|
553 | ||
|
554 | for v in args['args']: | |
|
555 | k = findsymbolicname(v) | |
|
556 | if not k: | |
|
557 | raise error.ParseError(_('dict key cannot be inferred')) | |
|
558 | if k in data or k in args['kwargs']: | |
|
559 | raise error.ParseError(_("duplicated dict key '%s' inferred") % k) | |
|
560 | data[k] = evalfuncarg(context, mapping, v) | |
|
561 | ||
|
552 | 562 | data.update((k, evalfuncarg(context, mapping, v)) |
|
553 | 563 | for k, v in args['kwargs'].iteritems()) |
|
554 | 564 | return templatekw.hybriddict(data) |
@@ -3424,6 +3424,21 b' Test dict constructor:' | |||
|
3424 | 3424 | $ hg log -r 0 -T '{dict()|json}\n' |
|
3425 | 3425 | {} |
|
3426 | 3426 | |
|
3427 | $ hg log -r 0 -T '{dict(rev, node=node|short)}\n' | |
|
3428 | rev=0 node=f7769ec2ab97 | |
|
3429 | $ hg log -r 0 -T '{dict(rev, node|short)}\n' | |
|
3430 | rev=0 node=f7769ec2ab97 | |
|
3431 | ||
|
3432 | $ hg log -r 0 -T '{dict(rev, rev=rev)}\n' | |
|
3433 | hg: parse error: duplicated dict key 'rev' inferred | |
|
3434 | [255] | |
|
3435 | $ hg log -r 0 -T '{dict(node, node|short)}\n' | |
|
3436 | hg: parse error: duplicated dict key 'node' inferred | |
|
3437 | [255] | |
|
3438 | $ hg log -r 0 -T '{dict(1 + 2)}' | |
|
3439 | hg: parse error: dict key cannot be inferred | |
|
3440 | [255] | |
|
3441 | ||
|
3427 | 3442 | $ hg log -r 0 -T '{dict(x=rev, x=node)}' |
|
3428 | 3443 | hg: parse error: dict got multiple values for keyword argument 'x' |
|
3429 | 3444 | [255] |
General Comments 0
You need to be logged in to leave comments.
Login now