From 5e2d1e57ec441ae2a3b2099d7c6b8db6c6fc5691 Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Tue, 11 Jul 2023 21:52:27 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20trailing=20single=20asteri?= =?UTF-8?q?sk=20matching=20subdirs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch aims to prevent path patterns ending with `/*` from being greedy and interpreted the same as `/**`. After applying it, that trailing asterisk only matches one file or directory but not nested ones. --- coverage/files.py | 2 +- tests/test_report.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coverage/files.py b/coverage/files.py index aade31afd..2daa4a59e 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -316,7 +316,7 @@ def sep(s: str) -> str: (r"\*\*+[^/]+", None), # Can't have **x (r"\*\*/\*\*", None), # Can't have **/** (r"^\*+/", r"(.*[/\\\\])?"), # ^*/ matches any prefix-slash, or nothing. - (r"/\*+$", r"[/\\\\].*"), # /*$ matches any slash-suffix. + (r"/\*\*+$", r"[/\\\\].*"), # /**$ matches any slash-suffix. (r"\*\*/", r"(.*[/\\\\])?"), # **/ matches any subdirs, including none (r"/", r"[/\\\\]"), # / matches either slash or backslash (r"\*", r"[^/\\\\]*"), # * matches any number of non slash-likes diff --git a/tests/test_report.py b/tests/test_report.py index 51a4fc683..316472537 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -107,7 +107,7 @@ def test_report_omitting(self) -> None: self.make_mycode() cov = coverage.Coverage() self.start_import_stop(cov, "mycode") - report = self.get_report(cov, omit=[f"{TESTS_DIR}/*", "*/site-packages/*"]) + report = self.get_report(cov, omit=[f"{TESTS_DIR}/**", "*/site-packages/**"]) # Name Stmts Miss Cover # -------------------------------