summaryrefslogtreecommitdiff
path: root/coverage/annotate.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-04-19 08:16:50 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-04-19 08:16:50 -0400
commitca1b25a3089a7db3d5a08c2a317a2f689f2ff34f (patch)
tree8c947e89e203e9ff105f358809e453f49c45b087 /coverage/annotate.py
parentffc86c415c32d5d2b55da35bb9a16e82e7d8e133 (diff)
downloadpython-coveragepy-ca1b25a3089a7db3d5a08c2a317a2f689f2ff34f.tar.gz
Annotated files are only created for source files relative to the current directory. When writing to a separate file, annotation file names include the directory hierarchy flattened, so that same-named files won't collide.
Diffstat (limited to 'coverage/annotate.py')
-rw-r--r--coverage/annotate.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/coverage/annotate.py b/coverage/annotate.py
index 14a7b7c..c0c6980 100644
--- a/coverage/annotate.py
+++ b/coverage/annotate.py
@@ -7,7 +7,6 @@ from coverage.report import Reporter
class AnnotateReporter(Reporter):
def __init__(self, coverage, ignore_errors=False):
super(AnnotateReporter, self).__init__(coverage, ignore_errors)
-
self.directory = None
blank_re = re.compile(r"\s*(#|$)")
@@ -17,27 +16,36 @@ class AnnotateReporter(Reporter):
self.find_code_units(morfs, omit_prefixes)
self.directory = directory
+ if self.directory and not os.path.exists(self.directory):
+ os.makedirs(self.directory)
+
for cu in self.code_units:
try:
+ if not cu.relative:
+ continue
statements, excluded, missing, _ = self.coverage.analyze(cu)
- self.annotate_file(cu.filename, statements, excluded, missing)
+ self.annotate_file(cu, statements, excluded, missing)
except KeyboardInterrupt:
raise
except:
if not self.ignore_errors:
raise
- def annotate_file(self, filename, statements, excluded, missing):
+ def annotate_file(self, cu, statements, excluded, missing):
+ """Annotate a single file.
+
+ `cu` is the CodeUnit for the file to annotate.
+
+ """
+ filename = cu.filename
source = open(filename, 'r')
if self.directory:
- if not os.path.exists(self.directory):
- os.makedirs(self.directory)
- dest_file = os.path.join(self.directory,
- os.path.basename(filename)
- + ',cover')
+ dest_file = os.path.join(self.directory, cu.flat_rootname()) + ".py"
else:
- dest_file = filename + ',cover'
+ dest_file = filename
+ dest_file += ",cover"
dest = open(dest_file, 'w')
+
lineno = 0
i = 0
j = 0
@@ -46,11 +54,11 @@ class AnnotateReporter(Reporter):
line = source.readline()
if line == '':
break
- lineno = lineno + 1
+ lineno += 1
while i < len(statements) and statements[i] < lineno:
- i = i + 1
+ i += 1
while j < len(missing) and missing[j] < lineno:
- j = j + 1
+ j += 1
if i < len(statements) and statements[i] == lineno:
covered = j >= len(missing) or missing[j] > lineno
if self.blank_re.match(line):