From ca1b25a3089a7db3d5a08c2a317a2f689f2ff34f Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 19 Apr 2009 08:16:50 -0400 Subject: 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. --- coverage/annotate.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'coverage/annotate.py') 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): -- cgit v1.2.1