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}')