From 81fb0d13bec0598bd9174a8aced0a28647c06d80 Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Fri, 21 Mar 2025 13:58:11 -0700 Subject: [PATCH 1/6] fix: add list_relevant_files to NoVersioningSystem --- codecov_cli/helpers/versioning_systems.py | 56 ++++++++++++++++++- .../services/upload/test_upload_collector.py | 22 +++++++- 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/codecov_cli/helpers/versioning_systems.py b/codecov_cli/helpers/versioning_systems.py index 856778cf..431b877f 100644 --- a/codecov_cli/helpers/versioning_systems.py +++ b/codecov_cli/helpers/versioning_systems.py @@ -1,3 +1,4 @@ +from itertools import chain import logging import subprocess import typing as t @@ -148,6 +149,45 @@ def list_relevant_files( class NoVersioningSystem(VersioningSystemInterface): + @classmethod + def blockdirs(cls): + return [ + '*.egg-info', + '.DS_Store', + '.circleci', + '.env', + '.envs', + '.git', + '.gitignore', + '.mypy_cache', + '.nvmrc', + '.nyc_output', + '.ruff_cache', + '.venv', + '.venvns', + '.virtualenv', + '.virtualenvs', + '__pycache__', + 'bower_components', + 'build/lib/', + 'jspm_packages', + 'node_modules', + 'vendor', + 'virtualenv', + 'virtualenvs', + ] + + @classmethod + def blockfiles(cls): + return [ + '*.gif', + '*.jpeg', + '*.jpg', + '*.md', + '*.png', + 'shunit2*', + ] + @classmethod def is_available(cls): return True @@ -161,4 +201,18 @@ def get_fallback_value(self, fallback_field: FallbackFieldEnum): def list_relevant_files( self, directory: t.Optional[Path] = None, recurse_submodules: bool = False ) -> t.List[str]: - return [] + dir_to_use = directory or self.get_network_root() + if dir_to_use is None: + raise ValueError("Can't determine root folder") + + cmd = [ + "find", + dir_to_use, + *list(chain(*[["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()])), + *list(chain(*[["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()])), + "-type", + "f", + "-print", + ] + res = subprocess.run(cmd, capture_output=True) + return [filename for filename in res.stdout.decode("unicode_escape").strip().split("\n") if filename] diff --git a/tests/services/upload/test_upload_collector.py b/tests/services/upload/test_upload_collector.py index c3aeca26..8700c1a9 100644 --- a/tests/services/upload/test_upload_collector.py +++ b/tests/services/upload/test_upload_collector.py @@ -195,12 +195,28 @@ def test_generate_upload_data_with_none_network( mock_logger.debug.assert_any_call("Collecting relevant files") mock_logger.debug.assert_any_call( - "Found 0 network files to report, (0 without filtering)" + "Found 1067 network files to report, (1067 without filtering)" ) mock_logger.info.assert_any_call("Found 1 coverage files to report") mock_logger.info.assert_any_call("> {}".format(tmp_path / "coverage.xml")) - assert res.network == [] + assert len(res.network) == 1067 assert len(res.files) == 1 - assert len(res.file_fixes) == 0 + assert len(res.file_fixes) == 24 + +@patch("codecov_cli.services.upload.upload_collector.logger") +@patch.object(GitVersioningSystem, "get_network_root", return_value=None) +def test_generate_network_with_no_versioning_system( + mock_get_network_root, mock_logger, tmp_path +): + versioning_system = NoVersioningSystem() + found_files = versioning_system.list_relevant_files() + assert len(found_files) == 1067 + + found_files = versioning_system.list_relevant_files(tmp_path) + assert len(found_files) == 0 + + (tmp_path / "coverage.xml").touch() + found_files = versioning_system.list_relevant_files(tmp_path) + assert len(found_files) == 1 From 03e52b87f268f71c17d6e0187a8742284ece85b5 Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Fri, 21 Mar 2025 14:17:45 -0700 Subject: [PATCH 2/6] fix: address comments --- codecov_cli/helpers/versioning_systems.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codecov_cli/helpers/versioning_systems.py b/codecov_cli/helpers/versioning_systems.py index 431b877f..1baef213 100644 --- a/codecov_cli/helpers/versioning_systems.py +++ b/codecov_cli/helpers/versioning_systems.py @@ -208,8 +208,8 @@ def list_relevant_files( cmd = [ "find", dir_to_use, - *list(chain(*[["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()])), - *list(chain(*[["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()])), + *chain(*[["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()]), + *chain(*[["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()]), "-type", "f", "-print", From 32734f494df2e9bbb73659cec4a2ad404746a214 Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Fri, 21 Mar 2025 14:18:46 -0700 Subject: [PATCH 3/6] fix: make it nicer looking --- codecov_cli/helpers/versioning_systems.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codecov_cli/helpers/versioning_systems.py b/codecov_cli/helpers/versioning_systems.py index 1baef213..4c67aa4c 100644 --- a/codecov_cli/helpers/versioning_systems.py +++ b/codecov_cli/helpers/versioning_systems.py @@ -208,8 +208,8 @@ def list_relevant_files( cmd = [ "find", dir_to_use, - *chain(*[["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()]), - *chain(*[["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()]), + *chain.from_iterable(["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()), + *chain.from_iterable(["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()), "-type", "f", "-print", From 4256ffe2704c8c10603f36f76765fa08b3318086 Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Fri, 21 Mar 2025 14:25:19 -0700 Subject: [PATCH 4/6] fix: unknown number of files --- tests/services/upload/test_upload_collector.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/services/upload/test_upload_collector.py b/tests/services/upload/test_upload_collector.py index 8700c1a9..d2ca9b09 100644 --- a/tests/services/upload/test_upload_collector.py +++ b/tests/services/upload/test_upload_collector.py @@ -194,14 +194,11 @@ def test_generate_upload_data_with_none_network( res = collector.generate_upload_data() mock_logger.debug.assert_any_call("Collecting relevant files") - mock_logger.debug.assert_any_call( - "Found 1067 network files to report, (1067 without filtering)" - ) mock_logger.info.assert_any_call("Found 1 coverage files to report") mock_logger.info.assert_any_call("> {}".format(tmp_path / "coverage.xml")) - assert len(res.network) == 1067 + assert len(res.network) > 1 assert len(res.files) == 1 assert len(res.file_fixes) == 24 @@ -212,7 +209,7 @@ def test_generate_network_with_no_versioning_system( ): versioning_system = NoVersioningSystem() found_files = versioning_system.list_relevant_files() - assert len(found_files) == 1067 + assert len(found_files) > 1 found_files = versioning_system.list_relevant_files(tmp_path) assert len(found_files) == 0 From a39f9c63fd9cfa93cce6bfe5274432938627b7c7 Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Fri, 21 Mar 2025 14:30:12 -0700 Subject: [PATCH 5/6] fix: make it more than 1 --- tests/services/upload/test_upload_collector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/services/upload/test_upload_collector.py b/tests/services/upload/test_upload_collector.py index d2ca9b09..5e383e9f 100644 --- a/tests/services/upload/test_upload_collector.py +++ b/tests/services/upload/test_upload_collector.py @@ -200,7 +200,7 @@ def test_generate_upload_data_with_none_network( assert len(res.network) > 1 assert len(res.files) == 1 - assert len(res.file_fixes) == 24 + assert len(res.file_fixes) > 1 @patch("codecov_cli.services.upload.upload_collector.logger") @patch.object(GitVersioningSystem, "get_network_root", return_value=None) From 7d95b38935909f8020d75676724388416bebb50c Mon Sep 17 00:00:00 2001 From: Tom Hu Date: Mon, 24 Mar 2025 08:05:28 -0700 Subject: [PATCH 6/6] fix: make constants --- codecov_cli/helpers/versioning_systems.py | 78 +++++++++++------------ 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/codecov_cli/helpers/versioning_systems.py b/codecov_cli/helpers/versioning_systems.py index 4c67aa4c..c4e44cc8 100644 --- a/codecov_cli/helpers/versioning_systems.py +++ b/codecov_cli/helpers/versioning_systems.py @@ -11,6 +11,41 @@ logger = logging.getLogger("codecovcli") +IGNORE_DIRS = [ + '*.egg-info', + '.DS_Store', + '.circleci', + '.env', + '.envs', + '.git', + '.gitignore', + '.mypy_cache', + '.nvmrc', + '.nyc_output', + '.ruff_cache', + '.venv', + '.venvns', + '.virtualenv', + '.virtualenvs', + '__pycache__', + 'bower_components', + 'build/lib/', + 'jspm_packages', + 'node_modules', + 'vendor', + 'virtualenv', + 'virtualenvs', +] + +IGNORE_PATHS = [ + '*.gif', + '*.jpeg', + '*.jpg', + '*.md', + '*.png', + 'shunit2*', +] + class VersioningSystemInterface(ABC): def __repr__(self) -> str: @@ -149,45 +184,6 @@ def list_relevant_files( class NoVersioningSystem(VersioningSystemInterface): - @classmethod - def blockdirs(cls): - return [ - '*.egg-info', - '.DS_Store', - '.circleci', - '.env', - '.envs', - '.git', - '.gitignore', - '.mypy_cache', - '.nvmrc', - '.nyc_output', - '.ruff_cache', - '.venv', - '.venvns', - '.virtualenv', - '.virtualenvs', - '__pycache__', - 'bower_components', - 'build/lib/', - 'jspm_packages', - 'node_modules', - 'vendor', - 'virtualenv', - 'virtualenvs', - ] - - @classmethod - def blockfiles(cls): - return [ - '*.gif', - '*.jpeg', - '*.jpg', - '*.md', - '*.png', - 'shunit2*', - ] - @classmethod def is_available(cls): return True @@ -208,8 +204,8 @@ def list_relevant_files( cmd = [ "find", dir_to_use, - *chain.from_iterable(["-name", block, "-prune", "-o"] for block in self.__class__.blockdirs()), - *chain.from_iterable(["-path", block, "-prune", "-o"] for block in self.__class__.blockfiles()), + *chain.from_iterable(["-name", block, "-prune", "-o"] for block in IGNORE_DIRS), + *chain.from_iterable(["-path", block, "-prune", "-o"] for block in IGNORE_PATHS), "-type", "f", "-print",