diff --git a/changelogs/fragments/ansible-test-change-detection-empty-python.yml b/changelogs/fragments/ansible-test-change-detection-empty-python.yml deleted file mode 100644 index 12e4a910e4d..00000000000 --- a/changelogs/fragments/ansible-test-change-detection-empty-python.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - ansible-test no longer tracebacks during change analysis due to processing an empty python file diff --git a/test/lib/ansible_test/_internal/classification.py b/test/lib/ansible_test/_internal/classification.py index 7918f335a52..a7065c90b3b 100644 --- a/test/lib/ansible_test/_internal/classification.py +++ b/test/lib/ansible_test/_internal/classification.py @@ -288,6 +288,12 @@ class PathMapper: :type path: str :rtype: list[str] """ + if path == 'lib/ansible/module_utils/__init__.py': + return [] + + if path == 'plugins/module_utils/__init__.py': + return [] + if not self.python_module_utils_imports: display.info('Analyzing python module_utils imports...') before = time.time() diff --git a/test/lib/ansible_test/_internal/import_analysis.py b/test/lib/ansible_test/_internal/import_analysis.py index 5803fb84409..63c6c96179b 100644 --- a/test/lib/ansible_test/_internal/import_analysis.py +++ b/test/lib/ansible_test/_internal/import_analysis.py @@ -113,11 +113,6 @@ def get_python_module_utils_imports(compile_targets): for module_util in sorted(imports): if not imports[module_util]: - package_path = get_import_path(module_util, package=True) - - if os.path.exists(package_path) and not os.path.getsize(package_path): - continue # ignore empty __init__.py files - display.warning('No imports found which use the "%s" module_util.' % module_util) return imports @@ -128,17 +123,14 @@ def get_python_module_utils_name(path): # type: (str) -> str base_path = data_context().content.module_utils_path if data_context().content.collection: - prefix = 'ansible_collections.' + data_context().content.collection.prefix + 'plugins.module_utils' + prefix = 'ansible_collections.' + data_context().content.collection.prefix + 'plugins.module_utils.' else: - prefix = 'ansible.module_utils' + prefix = 'ansible.module_utils.' if path.endswith('/__init__.py'): path = os.path.dirname(path) - if path == base_path: - name = prefix - else: - name = prefix + '.' + os.path.splitext(os.path.relpath(path, base_path))[0].replace(os.path.sep, '.') + name = prefix + os.path.splitext(os.path.relpath(path, base_path))[0].replace(os.sep, '.') return name @@ -155,6 +147,9 @@ def enumerate_module_utils(): if ext != '.py': continue + if os.path.getsize(path) == 0: + continue + module_utils.append(get_python_module_utils_name(path)) return set(module_utils) @@ -191,9 +186,7 @@ def get_import_path(name, package=False): # type: (str, bool) -> str if name.startswith('ansible.module_utils.'): path = os.path.join('lib', filename) - elif data_context().content.collection and ( - name.startswith('ansible_collections.%s.plugins.module_utils.' % data_context().content.collection.full_name) or - name == 'ansible_collections.%s.plugins.module_utils' % data_context().content.collection.full_name): + elif data_context().content.collection and name.startswith('ansible_collections.%s.plugins.module_utils.' % data_context().content.collection.full_name): path = '/'.join(filename.split('/')[3:]) else: raise Exception('Unexpected import name: %s' % name)