summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/files.py8
-rw-r--r--coverage/report.py17
2 files changed, 10 insertions, 15 deletions
diff --git a/coverage/files.py b/coverage/files.py
index 94388f96..08ce1e84 100644
--- a/coverage/files.py
+++ b/coverage/files.py
@@ -1,7 +1,7 @@
"""File wrangling."""
from coverage.backward import to_string
-from coverage.misc import CoverageException
+from coverage.misc import CoverageException, join_regex
import fnmatch, os, os.path, re, sys
import ntpath, posixpath
@@ -177,6 +177,7 @@ class FnmatchMatcher(object):
"""A matcher for files by filename pattern."""
def __init__(self, pats):
self.pats = pats[:]
+ self.re = re.compile(join_regex([fnmatch.translate(p) for p in pats]))
def __repr__(self):
return "<FnmatchMatcher %r>" % self.pats
@@ -187,10 +188,7 @@ class FnmatchMatcher(object):
def match(self, fpath):
"""Does `fpath` match one of our filename patterns?"""
- for pat in self.pats:
- if fnmatch.fnmatch(fpath, pat):
- return True
- return False
+ return self.re.match(fpath) is not None
def sep(s):
diff --git a/coverage/report.py b/coverage/report.py
index 34f44422..03e9122c 100644
--- a/coverage/report.py
+++ b/coverage/report.py
@@ -1,8 +1,8 @@
"""Reporter foundation for Coverage."""
-import fnmatch, os
+import os
from coverage.codeunit import code_unit_factory
-from coverage.files import prep_patterns
+from coverage.files import prep_patterns, FnmatchMatcher
from coverage.misc import CoverageException, NoSource, NotPython
class Reporter(object):
@@ -37,22 +37,19 @@ class Reporter(object):
if self.config.include:
patterns = prep_patterns(self.config.include)
+ matcher = FnmatchMatcher(patterns)
filtered = []
for cu in self.code_units:
- for pattern in patterns:
- if fnmatch.fnmatch(cu.filename, pattern):
- filtered.append(cu)
- break
+ if matcher.match(cu.filename):
+ filtered.append(cu)
self.code_units = filtered
if self.config.omit:
patterns = prep_patterns(self.config.omit)
+ matcher = FnmatchMatcher(patterns)
filtered = []
for cu in self.code_units:
- for pattern in patterns:
- if fnmatch.fnmatch(cu.filename, pattern):
- break
- else:
+ if not matcher.match(cu.filename):
filtered.append(cu)
self.code_units = filtered