From dc0e80657257def9203b5e0ca7b6141d3dcd1d57 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Mon, 14 Dec 2020 16:19:29 +0100 Subject: [PATCH] fix: combine aliases on windows base dirs (ie: ``X:\``) (fixes: #577) Signed-off-by: Valentin Lab --- coverage/files.py | 6 ++++-- tests/test_files.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/coverage/files.py b/coverage/files.py index 5c2ff1ace..59b2bd61d 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -359,17 +359,19 @@ def add(self, pattern, result): match an entire tree, and not just its root. """ + pattern_sep = sep(pattern) + if len(pattern) > 1: pattern = pattern.rstrip(r"\/") # The pattern can't end with a wildcard component. if pattern.endswith("*"): raise CoverageException("Pattern must not end with wildcards.") - pattern_sep = sep(pattern) # The pattern is meant to match a filepath. Let's make it absolute # unless it already is, or is meant to match any prefix. - if not pattern.startswith('*') and not isabs_anywhere(pattern): + if not pattern.startswith('*') and not isabs_anywhere(pattern + + pattern_sep): pattern = abs_file(pattern) if not pattern.endswith(pattern_sep): pattern += pattern_sep diff --git a/tests/test_files.py b/tests/test_files.py index 9df4e5d0d..84e25f107 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -349,6 +349,20 @@ def test_multiple_wildcard(self): './django/foo/bar.py' ) + def test_windows_root_paths(self): + aliases = PathAliases() + aliases.add('X:\\', '/tmp/src') + self.assert_mapped( + aliases, + "X:\\a\\file.py", + "/tmp/src/a/file.py" + ) + self.assert_mapped( + aliases, + "X:\\file.py", + "/tmp/src/file.py" + ) + def test_leading_wildcard(self): aliases = PathAliases() aliases.add('*/d1', './mysrc1')