Show More
@@ -567,6 +567,20 b' def _formatfiltererror(arg, filt):' | |||||
567 | return (_("template filter '%s' is not compatible with keyword '%s'") |
|
567 | return (_("template filter '%s' is not compatible with keyword '%s'") | |
568 | % (fn, sym)) |
|
568 | % (fn, sym)) | |
569 |
|
569 | |||
|
570 | def _checkeditermaps(darg, d): | |||
|
571 | try: | |||
|
572 | for v in d: | |||
|
573 | if not isinstance(v, dict): | |||
|
574 | raise TypeError | |||
|
575 | yield v | |||
|
576 | except TypeError: | |||
|
577 | sym = findsymbolicname(darg) | |||
|
578 | if sym: | |||
|
579 | raise error.ParseError(_("keyword '%s' is not iterable of mappings") | |||
|
580 | % sym) | |||
|
581 | else: | |||
|
582 | raise error.ParseError(_("%r is not iterable of mappings") % d) | |||
|
583 | ||||
570 | def _iteroverlaymaps(context, origmapping, newmappings): |
|
584 | def _iteroverlaymaps(context, origmapping, newmappings): | |
571 | """Generate combined mappings from the original mapping and an iterable |
|
585 | """Generate combined mappings from the original mapping and an iterable | |
572 | of partial mappings to override the original""" |
|
586 | of partial mappings to override the original""" | |
@@ -578,28 +592,17 b' def _iteroverlaymaps(context, origmappin' | |||||
578 | def runmap(context, mapping, data): |
|
592 | def runmap(context, mapping, data): | |
579 | darg, targ = data |
|
593 | darg, targ = data | |
580 | d = evalrawexp(context, mapping, darg) |
|
594 | d = evalrawexp(context, mapping, darg) | |
|
595 | # TODO: a generator should be rejected because it is a thunk of lazy | |||
|
596 | # string, but we can't because hgweb abuses generator as a keyword | |||
|
597 | # that returns a list of dicts. | |||
581 | if isinstance(d, wrapped): |
|
598 | if isinstance(d, wrapped): | |
582 | diter = d.itermaps(context) |
|
599 | diter = d.itermaps(context) | |
583 | else: |
|
600 | else: | |
584 | try: |
|
601 | diter = _checkeditermaps(darg, d) | |
585 | diter = iter(d) |
|
|||
586 | except TypeError: |
|
|||
587 | sym = findsymbolicname(darg) |
|
|||
588 | if sym: |
|
|||
589 | raise error.ParseError(_("keyword '%s' is not iterable") % sym) |
|
|||
590 | else: |
|
|||
591 | raise error.ParseError(_("%r is not iterable") % d) |
|
|||
592 |
|
||||
593 | for i, v in enumerate(diter): |
|
602 | for i, v in enumerate(diter): | |
594 | if isinstance(v, dict): |
|
603 | lm = context.overlaymap(mapping, v) | |
595 | lm = context.overlaymap(mapping, v) |
|
604 | lm['index'] = i | |
596 | lm['index'] = i |
|
605 | yield evalrawexp(context, lm, targ) | |
597 | yield evalrawexp(context, lm, targ) |
|
|||
598 | else: |
|
|||
599 | # v is not an iterable of dicts, this happen when 'key' |
|
|||
600 | # has been fully expanded already and format is useless. |
|
|||
601 | # If so, return the expanded value. |
|
|||
602 | yield v |
|
|||
603 |
|
606 | |||
604 | def runmember(context, mapping, data): |
|
607 | def runmember(context, mapping, data): | |
605 | darg, memb = data |
|
608 | darg, memb = data |
@@ -3210,10 +3210,13 b' Test new-style inline templating:' | |||||
3210 |
|
3210 | |||
3211 |
|
3211 | |||
3212 | $ hg log -R latesttag -r tip -T '{rev % "a"}\n' |
|
3212 | $ hg log -R latesttag -r tip -T '{rev % "a"}\n' | |
3213 | hg: parse error: keyword 'rev' is not iterable |
|
3213 | hg: parse error: keyword 'rev' is not iterable of mappings | |
3214 | [255] |
|
3214 | [255] | |
3215 | $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "a"}\n' |
|
3215 | $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "a"}\n' | |
3216 | hg: parse error: None is not iterable |
|
3216 | hg: parse error: None is not iterable of mappings | |
|
3217 | [255] | |||
|
3218 | $ hg log -R latesttag -r tip -T '{extras % "{key}\n" % "{key}\n"}' | |||
|
3219 | hg: parse error: <generator *> is not iterable of mappings (glob) | |||
3217 | [255] |
|
3220 | [255] | |
3218 |
|
3221 | |||
3219 | Test new-style inline templating of non-list/dict type: |
|
3222 | Test new-style inline templating of non-list/dict type: | |
@@ -3228,7 +3231,7 b' Test new-style inline templating of non-' | |||||
3228 | $ hg log -R latesttag -r tip -T '{get(extras, "branch") % "{key}: {value}\n"}' |
|
3231 | $ hg log -R latesttag -r tip -T '{get(extras, "branch") % "{key}: {value}\n"}' | |
3229 | branch: default |
|
3232 | branch: default | |
3230 | $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "{key}\n"}' |
|
3233 | $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "{key}\n"}' | |
3231 | hg: parse error: None is not iterable |
|
3234 | hg: parse error: None is not iterable of mappings | |
3232 | [255] |
|
3235 | [255] | |
3233 | $ hg log -R latesttag -r tip -T '{min(extras) % "{key}: {value}\n"}' |
|
3236 | $ hg log -R latesttag -r tip -T '{min(extras) % "{key}: {value}\n"}' | |
3234 | branch: default |
|
3237 | branch: default |
General Comments 0
You need to be logged in to leave comments.
Login now