From 3e4be156d7ac59fa736ed22533355f01a5629baa Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Mon, 6 Mar 2017 12:05:28 -0800 Subject: [PATCH] Pre-compile regexes to speed up target processing. Without this, changing a large number of files results in target processing taking a very long time due to repeatedly compiling the same patterns in a loop over many targets. --- test/runner/lib/target.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/runner/lib/target.py b/test/runner/lib/target.py index f1126cfb06c..f6051ec73ee 100644 --- a/test/runner/lib/target.py +++ b/test/runner/lib/target.py @@ -137,6 +137,7 @@ def filter_targets(targets, patterns, include=True, directories=True, errors=Tru :rtype: collections.Iterable[CompletionTarget] """ unmatched = set(patterns or ()) + compiled_patterns = dict((p, re.compile('^%s$' % p)) for p in patterns) if patterns else None for target in targets: matched_directories = set() @@ -145,7 +146,7 @@ def filter_targets(targets, patterns, include=True, directories=True, errors=Tru if patterns: for alias in target.aliases: for pattern in patterns: - if re.match('^%s$' % pattern, alias): + if compiled_patterns[pattern].match(alias): match = True try: