diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-04-19 08:16:50 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-04-19 08:16:50 -0400 |
commit | 4d45dc8c234eee1b4bd6da9eac409d588eba9455 (patch) | |
tree | 387e5f55061359707d33b39681ad555d5e9ef0b5 /coverage/annotate.py | |
parent | 89fbd04106100a4cc821cc41bac2e9301bda33ec (diff) | |
download | python-coveragepy-git-4d45dc8c234eee1b4bd6da9eac409d588eba9455.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.
--HG--
rename : test/farm/annotate/gold_anno_dir/a.py,cover => test/farm/annotate/gold_anno_dir/a_a.py,cover
rename : test/farm/annotate/gold_anno_dir/b.py,cover => test/farm/annotate/gold_anno_dir/b_b.py,cover
Diffstat (limited to 'coverage/annotate.py')
-rw-r--r-- | coverage/annotate.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/coverage/annotate.py b/coverage/annotate.py index 14a7b7c7..c0c69800 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): |