Skip to content

Commit b9c2a36

Browse files
committed
Fix #194: a file path could have its prefix twice.
1 parent 825acb3 commit b9c2a36

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

CHANGES.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ Version 3.5.3b1
2121
- Optimized .pyo files may not have been handled correctly, `issue 195`_.
2222
Thanks, Marius Gedminas.
2323

24+
- Certain unusually named file paths could have been mangled during reporting,
25+
`issue 194`_. Thanks, Marius Gedminas.
26+
2427
- Try to do a better job of the impossible task of detecting when we can't
2528
build the C extension, fixing `issue 183`_.
2629

@@ -29,6 +32,7 @@ Version 3.5.3b1
2932
.. _issue 82: https://bitbucket.org/ned/coveragepy/issue/82/tokenerror-when-generating-html-report
3033
.. _issue 179: https://bitbucket.org/ned/coveragepy/issue/179/htmlreporter-fails-when-source-file-is
3134
.. _issue 183: https://bitbucket.org/ned/coveragepy/issue/183/install-fails-for-python-23
35+
.. _issue 194: https://bitbucket.org/ned/coveragepy/issue/194/filelocatorrelative_filename-could-mangle
3236
.. _issue 195: https://bitbucket.org/ned/coveragepy/issue/195/pyo-file-handling-in-codeunit
3337
.. _tox: http://tox.readthedocs.org/
3438

coverage/files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def relative_filename(self, filename):
2727
2828
"""
2929
if filename.startswith(self.relative_dir):
30-
filename = filename.replace(self.relative_dir, "")
30+
filename = filename.replace(self.relative_dir, "", 1)
3131
return filename
3232

3333
def canonical_filename(self, filename):

test/test_files.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ def test_peer_directories(self):
3737
self.assertEqual(fl.relative_filename(a1), "file1.py")
3838
self.assertEqual(fl.relative_filename(a2), a2)
3939

40+
def test_filepath_contains_absolute_prefix_twice(self):
41+
# https://bitbucket.org/ned/coveragepy/issue/194/filelocatorrelative_filename-could-mangle
42+
fl = FileLocator()
43+
d = fl.abs_file(os.curdir)
44+
rel = os.path.join('sub', d.lstrip(os.path.sep), 'file1.py')
45+
self.assertEqual(fl.relative_filename(fl.abs_file(rel)), rel)
46+
4047

4148
class MatcherTest(CoverageTest):
4249
"""Tests of file matchers."""

0 commit comments

Comments
 (0)