Mercurial > hg
comparison mercurial/templatefuncs.py @ 40935:4591c9791a82
templatefuncs: specialize "no match" value of search() to allow % operation
If Python had Maybe or Option, the type of the search() result would be
Option<Mapping>, which can be considered as a 0/1 container of a Mapping.
So it makes sense that {search(r'no match pattern', x) % "whatever"} is
mapped to an empty string.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 12 Dec 2018 22:45:02 +0900 |
parents | d3e688b9ef2e |
children | 6704696141b8 |
comparison
equal
deleted
inserted
replaced
40934:d3e688b9ef2e | 40935:4591c9791a82 |
---|---|
607 % {b'group': b', '.join("'%s'" % g for g in sorted(badgroups)), | 607 % {b'group': b', '.join("'%s'" % g for g in sorted(badgroups)), |
608 b'pat': pat}) | 608 b'pat': pat}) |
609 | 609 |
610 match = patre.search(src) | 610 match = patre.search(src) |
611 if not match: | 611 if not match: |
612 return | 612 return templateutil.mappingnone() |
613 | 613 |
614 lm = {b'0': match.group(0)} | 614 lm = {b'0': match.group(0)} |
615 lm.update((b'%d' % i, v) for i, v in enumerate(match.groups(), 1)) | 615 lm.update((b'%d' % i, v) for i, v in enumerate(match.groups(), 1)) |
616 lm.update(pycompat.byteskwargs(match.groupdict())) | 616 lm.update(pycompat.byteskwargs(match.groupdict())) |
617 return templateutil.mappingdict(lm, tmpl=b'{0}') | 617 return templateutil.mappingdict(lm, tmpl=b'{0}') |