diff options
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/config.py | 6 | ||||
-rw-r--r-- | coverage/control.py | 29 | ||||
-rw-r--r-- | coverage/files.py | 33 | ||||
-rw-r--r-- | coverage/report.py | 5 |
4 files changed, 38 insertions, 35 deletions
diff --git a/coverage/config.py b/coverage/config.py index 49d74e7a..0d1da5f4 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -2,6 +2,7 @@ import os from coverage.backward import configparser # pylint: disable=W0622 +from coverage.backward import string_class # pylint: disable=W0622 # The default line exclusion regexes DEFAULT_EXCLUDE = [ @@ -69,10 +70,14 @@ class CoverageConfig(object): if env: self.timid = ('--timid' in env) + MUST_BE_LIST = ["omit", "include"] + def from_args(self, **kwargs): """Read config values from `kwargs`.""" for k, v in kwargs.items(): if v is not None: + if k in self.MUST_BE_LIST and isinstance(v, string_class): + v = [v] setattr(self, k, v) def from_file(self, *files): @@ -167,4 +172,3 @@ class CoverageConfig(object): """ value_list = cp.get(section, option) return list(filter(None, value_list.split('\n'))) - diff --git a/coverage/control.py b/coverage/control.py index c21d885e..acca99ee 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -9,7 +9,7 @@ from coverage.collector import Collector from coverage.config import CoverageConfig from coverage.data import CoverageData from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher -from coverage.files import PathAliases, find_python_files +from coverage.files import PathAliases, find_python_files, prep_patterns from coverage.html import HtmlReporter from coverage.misc import CoverageException, bool_or_none, join_regex from coverage.results import Analysis, Numbers @@ -96,10 +96,6 @@ class coverage(object): self.config.data_file = env_data_file # 4: from constructor arguments: - if isinstance(omit, string_class): - omit = [omit] - if isinstance(include, string_class): - include = [include] self.config.from_args( data_file=data_file, cover_pylib=cover_pylib, timid=timid, branch=branch, parallel=bool_or_none(data_suffix), @@ -125,8 +121,8 @@ class coverage(object): else: self.source_pkgs.append(src) - self.omit = self._prep_patterns(self.config.omit) - self.include = self._prep_patterns(self.config.include) + self.omit = prep_patterns(self.config.omit) + self.include = prep_patterns(self.config.include) self.collector = Collector( self._should_trace, timid=self.config.timid, @@ -281,25 +277,6 @@ class coverage(object): self._warnings.append(msg) sys.stderr.write("Coverage.py warning: %s\n" % msg) - def _prep_patterns(self, patterns): - """Prepare the file patterns for use in a `FnmatchMatcher`. - - If a pattern starts with a wildcard, it is used as a pattern - as-is. If it does not start with a wildcard, then it is made - absolute with the current directory. - - If `patterns` is None, an empty list is returned. - - """ - patterns = patterns or [] - prepped = [] - for p in patterns or []: - if p.startswith("*") or p.startswith("?"): - prepped.append(p) - else: - prepped.append(self.file_locator.abs_file(p)) - return prepped - def _check_for_packages(self): """Update the source_match matcher with latest imported packages.""" # Our self.source_pkgs attribute is a list of package names we want to diff --git a/coverage/files.py b/coverage/files.py index 13f43930..632d6e31 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -9,16 +9,12 @@ class FileLocator(object): def __init__(self): # The absolute path to our current directory. - self.relative_dir = self.abs_file(os.curdir) + os.sep + self.relative_dir = abs_file(os.curdir) + os.sep # Cache of results of calling the canonical_filename() method, to # avoid duplicating work. self.canonical_filename_cache = {} - def abs_file(self, filename): - """Return the absolute normalized form of `filename`.""" - return os.path.normcase(os.path.abspath(os.path.realpath(filename))) - def relative_filename(self, filename): """Return the relative form of `filename`. @@ -49,7 +45,7 @@ class FileLocator(object): if os.path.exists(g): f = g break - cf = self.abs_file(f) + cf = abs_file(f) self.canonical_filename_cache[filename] = cf return self.canonical_filename_cache[filename] @@ -78,6 +74,31 @@ class FileLocator(object): return None +def abs_file(filename): + """Return the absolute normalized form of `filename`.""" + return os.path.normcase(os.path.abspath(os.path.realpath(filename))) + + +def prep_patterns(patterns): + """Prepare the file patterns for use in a `FnmatchMatcher`. + + If a pattern starts with a wildcard, it is used as a pattern + as-is. If it does not start with a wildcard, then it is made + absolute with the current directory. + + If `patterns` is None, an empty list is returned. + + """ + patterns = patterns or [] + prepped = [] + for p in patterns or []: + if p.startswith("*") or p.startswith("?"): + prepped.append(p) + else: + prepped.append(abs_file(p)) + return prepped + + class TreeMatcher(object): """A matcher for files in a tree.""" def __init__(self, directories): diff --git a/coverage/report.py b/coverage/report.py index e351340f..34f44422 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -2,6 +2,7 @@ import fnmatch, os from coverage.codeunit import code_unit_factory +from coverage.files import prep_patterns from coverage.misc import CoverageException, NoSource, NotPython class Reporter(object): @@ -35,7 +36,7 @@ class Reporter(object): self.code_units = code_unit_factory(morfs, file_locator) if self.config.include: - patterns = [file_locator.abs_file(p) for p in self.config.include] + patterns = prep_patterns(self.config.include) filtered = [] for cu in self.code_units: for pattern in patterns: @@ -45,7 +46,7 @@ class Reporter(object): self.code_units = filtered if self.config.omit: - patterns = [file_locator.abs_file(p) for p in self.config.omit] + patterns = prep_patterns(self.config.omit) filtered = [] for cu in self.code_units: for pattern in patterns: |