summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2012-11-14 07:51:21 -0500
committerNed Batchelder <ned@nedbatchelder.com>2012-11-14 07:51:21 -0500
commit74714c35de79953fb9c0e7c604c23fb33f83c502 (patch)
tree001148b6494da3a74bdca9d21445b69fa2f4cb29
parentc69ca06732c6774ef802fc5cf25f760c7f252f0f (diff)
downloadpython-coveragepy-git-74714c35de79953fb9c0e7c604c23fb33f83c502.tar.gz
Refactor, and make it work on older Pythons.
-rw-r--r--coverage/control.py6
-rw-r--r--coverage/data.py8
-rw-r--r--coverage/misc.py14
-rw-r--r--test/test_misc.py21
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"""