diff options
author | Jordan Borean <jborean93@gmail.com> | 2018-12-07 04:11:44 +1000 |
---|---|---|
committer | Matt Davis <nitzmahone@users.noreply.github.com> | 2018-12-06 10:11:44 -0800 |
commit | 6713c3bcfd33e20f00ec5e0f9391e4cb865df518 (patch) | |
tree | efb769d719e1e80fbc873b483743f798e19b670d | |
parent | 8c3f78069356b2777116442c9f944c7e8d4a6db3 (diff) | |
download | ansible-6713c3bcfd33e20f00ec5e0f9391e4cb865df518.tar.gz |
ansible-test: recursively scan setup dependencies (#49170) (#49216)
* ansible-test: recursively scan setup dependencies
* removed need for default set()
(cherry picked from commit 694c505452790d0a55413b3ac157d3dbf6be1ebb)
-rw-r--r-- | test/runner/lib/target.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/test/runner/lib/target.py b/test/runner/lib/target.py index 5713562ce5..f2c5540302 100644 --- a/test/runner/lib/target.py +++ b/test/runner/lib/target.py @@ -340,8 +340,9 @@ def analyze_integration_target_dependencies(integration_targets): :type integration_targets: list[IntegrationTarget] :rtype: dict[str,set[str]] """ - hidden_role_target_names = set(t.name for t in integration_targets if t.type == 'role' and 'hidden/' in t.aliases) - normal_role_targets = [t for t in integration_targets if t.type == 'role' and 'hidden/' not in t.aliases] + role_targets = [t for t in integration_targets if t.type == 'role'] + hidden_role_target_names = set(t.name for t in role_targets if 'hidden/' in t.aliases) + dependencies = collections.defaultdict(set) # handle setup dependencies @@ -350,7 +351,7 @@ def analyze_integration_target_dependencies(integration_targets): dependencies[setup_target_name].add(target.name) # intentionally primitive analysis of role meta to avoid a dependency on pyyaml - for role_target in normal_role_targets: + for role_target in role_targets: meta_dir = os.path.join(role_target.path, 'meta') if not os.path.isdir(meta_dir): @@ -374,6 +375,23 @@ def analyze_integration_target_dependencies(integration_targets): if hidden_target_name in meta_line: dependencies[hidden_target_name].add(role_target.name) + while True: + changes = 0 + + for dummy, dependent_target_names in dependencies.items(): + for dependent_target_name in list(dependent_target_names): + new_target_names = dependencies.get(dependent_target_name) + + if new_target_names: + for new_target_name in new_target_names: + if new_target_name not in dependent_target_names: + dependent_target_names.add(new_target_name) + changes += 1 + dependent_target_names.remove(dependent_target_name) + + if not changes: + break + return dependencies |