diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2012-11-14 07:51:21 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2012-11-14 07:51:21 -0500 |
commit | 74714c35de79953fb9c0e7c604c23fb33f83c502 (patch) | |
tree | 001148b6494da3a74bdca9d21445b69fa2f4cb29 | |
parent | c69ca06732c6774ef802fc5cf25f760c7f252f0f (diff) | |
download | python-coveragepy-git-74714c35de79953fb9c0e7c604c23fb33f83c502.tar.gz |
Refactor, and make it work on older Pythons.
-rw-r--r-- | coverage/control.py | 6 | ||||
-rw-r--r-- | coverage/data.py | 8 | ||||
-rw-r--r-- | coverage/misc.py | 14 | ||||
-rw-r--r-- | test/test_misc.py | 21 |
4 files changed, 38 insertions, 11 deletions
diff --git a/coverage/control.py b/coverage/control.py index 0588e68e..7d04cd88 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -12,6 +12,7 @@ from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher 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.misc import file_be_gone from coverage.results import Analysis, Numbers from coverage.summary import SummaryReporter from coverage.xmlreport import XmlReporter @@ -624,10 +625,7 @@ class coverage(object): if file_to_close: file_to_close.close() if delete_file: - try: - os.remove(self.config.xml_output) - except Exception: - pass + file_be_gone(self.config.xml_output) def sysinfo(self): """Return a list of (key, value) pairs showing internal information.""" diff --git a/coverage/data.py b/coverage/data.py index b7a08420..6d4528b3 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -1,10 +1,10 @@ """Coverage data for Coverage.""" import os -import errno from coverage.backward import pickle, sorted # pylint: disable=W0622 from coverage.files import PathAliases +from coverage.misc import file_be_gone class CoverageData(object): @@ -91,11 +91,7 @@ class CoverageData(object): """Erase the data, both in this object, and from its file storage.""" if self.use_file: if self.filename: - try: - os.remove(self.filename) - except OSError as e: - if e.errno != errno.ENOENT: - raise + file_be_gone(self.filename) self.lines = {} self.arcs = {} diff --git a/coverage/misc.py b/coverage/misc.py index fd9be857..3ed854a7 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -1,6 +1,10 @@ """Miscellaneous stuff for Coverage.""" +import errno import inspect +import os +import sys + from coverage.backward import md5, sorted # pylint: disable=W0622 from coverage.backward import string_class, to_bytes @@ -83,6 +87,16 @@ def join_regex(regexes): return "" +def file_be_gone(path): + """Remove a file, and don't get annoyed if it doesn't exist.""" + try: + os.remove(path) + except OSError: + _, e, _ = sys.exc_info() + if e.errno != errno.ENOENT: + raise + + class Hasher(object): """Hashes Python data into md5.""" def __init__(self): diff --git a/test/test_misc.py b/test/test_misc.py index 44607a2d..ac53cddb 100644 --- a/test/test_misc.py +++ b/test/test_misc.py @@ -2,7 +2,7 @@ import os, sys -from coverage.misc import Hasher +from coverage.misc import Hasher, file_be_gone from coverage import __version__, __url__ sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k from coveragetest import CoverageTest @@ -28,6 +28,25 @@ class HasherTest(CoverageTest): self.assertEqual(h1.digest(), h2.digest()) +class RemoveFileTest(CoverageTest): + """Tests of misc.file_be_gone.""" + + def test_remove_nonexistent_file(self): + # it's ok to try to remove a file that doesn't exist. + file_be_gone("not_here.txt") + + def test_remove_actual_file(self): + # it really does remove a file that does exist. + self.make_file("here.txt", "We are here, we are here, we are here!") + file_be_gone("here.txt") + self.assert_doesnt_exist("here.txt") + + def test_actual_errors(self): + # Errors can still happen. + # ". is a directory" on Unix, or "Access denied" on Windows + self.assertRaises(OSError, file_be_gone, ".") + + class SetupPyTest(CoverageTest): """Tests of setup.py""" |