Mercurial > hg
changeset 5201:0f6a1bdf89fb
match: handle large regexes
Some Python versions don't handle large regexes, so when we hit an
overflow, split our regex in two.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 19 Aug 2007 14:03:56 -0500 |
parents | 6d5ed61c508c |
children | 1108c952cca1 bddb4ff134c0 |
files | mercurial/util.py |
diffstat | 1 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/util.py Fri Aug 17 22:43:38 2007 -0300 +++ b/mercurial/util.py Sun Aug 19 14:03:56 2007 -0500 @@ -476,6 +476,15 @@ try: pat = '(?:%s)' % '|'.join([regex(k, p, tail) for (k, p) in pats]) return re.compile(pat).match + except OverflowError: + # We're using a Python with a tiny regex engine and we + # made it explode, so we'll divide the pattern list in two + # until it works + l = len(pats) + if l < 2: + raise + a, b = matchfn(pats[:l/2], tail), matchfn(pats[l/2:], tail) + return lambda s: a(s) or b(s) except re.error: for k, p in pats: try: