diff options
-rw-r--r-- | coverage/control.py | 7 | ||||
-rw-r--r-- | coverage/misc.py | 15 | ||||
-rw-r--r-- | coverage/report.py | 5 |
3 files changed, 20 insertions, 7 deletions
diff --git a/coverage/control.py b/coverage/control.py index dd862ae9..a89a9da6 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -5,6 +5,7 @@ import atexit import os +import os.path import platform import sys import time @@ -22,7 +23,7 @@ from coverage.files import PathAliases, set_relative_directory, abs_file from coverage.html import HtmlReporter from coverage.inorout import InOrOut from coverage.misc import CoverageException, bool_or_none, join_regex -from coverage.misc import file_be_gone, isolate_module +from coverage.misc import ensure_dir_for_file, file_be_gone, isolate_module from coverage.plugin import FileReporter from coverage.plugin_support import Plugins from coverage.python import PythonFileReporter @@ -815,9 +816,7 @@ class Coverage(object): # because this report pre-opens the output file. # HTMLReport does this using the Report plumbing because # its task is more complex, being multiple files. - output_dir = os.path.dirname(self.config.xml_output) - if output_dir and not os.path.isdir(output_dir): - os.makedirs(output_dir) + ensure_dir_for_file(self.config.xml_output) open_kwargs = {} if env.PY3: open_kwargs['encoding'] = 'utf8' diff --git a/coverage/misc.py b/coverage/misc.py index a923829d..59114863 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -8,6 +8,7 @@ import hashlib import inspect import locale import os +import os.path import re import sys import types @@ -181,6 +182,20 @@ def file_be_gone(path): raise +def ensure_dir(directory): + """Make sure the directory exists. + + If `directory` is None or empty, do nothing. + """ + if directory and not os.path.isdir(directory): + os.makedirs(directory) + + +def ensure_dir_for_file(path): + """Make sure the directory for the path exists.""" + ensure_dir(os.path.dirname(path)) + + def output_encoding(outfile=None): """Determine the encoding to use for output written to `outfile` or stdout.""" if outfile is None: diff --git a/coverage/report.py b/coverage/report.py index e4378f6d..6f87bbf2 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -7,7 +7,7 @@ import os import warnings from coverage.files import prep_patterns, FnmatchMatcher -from coverage.misc import CoverageException, NoSource, NotPython, isolate_module +from coverage.misc import CoverageException, NoSource, NotPython, ensure_dir, isolate_module os = isolate_module(os) @@ -83,8 +83,7 @@ class Reporter(object): raise CoverageException("No data to report.") self.directory = directory - if self.directory and not os.path.exists(self.directory): - os.makedirs(self.directory) + ensure_dir(self.directory) for fr in file_reporters: try: |