summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2018-10-21 15:18:41 -0400
committerNed Batchelder <ned@nedbatchelder.com>2018-10-21 15:55:44 -0400
commit23963607312a888fc1c1949537497aa951b421c5 (patch)
tree3fbbbbdbd2f62fa245a3446e9a8732ffbbd591d7
parent6bea0ea1c75981d13e5e01c18bbab34b891757b3 (diff)
downloadpython-coveragepy-git-23963607312a888fc1c1949537497aa951b421c5.tar.gz
Helpers for making directories
-rw-r--r--coverage/control.py7
-rw-r--r--coverage/misc.py15
-rw-r--r--coverage/report.py5
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: