From 90d04ddd50c920be242b16ef386132a3ab1c0f00 Mon Sep 17 00:00:00 2001 From: Wong Hoi Sing Edison Date: Tue, 9 Nov 2021 15:13:19 +0800 Subject: [PATCH] Upgrade `resolvelib>=0.8.1,<0.9.0` Since 2021-09-27 `resolvelib` author comment with "issue resolved now" (see https://github.com/sarugaku/resolvelib/issues/69#issuecomment-927333533). Replace `resolvelib` version upper cap with `resolvelib>=0.8.1,<0.9.0` with corresponding `find_matches()` and `get_preference()` interface change should now be good enough. Signed-off-by: Wong Hoi Sing Edison --- docs/docsite/known_good_reqs.txt | 2 +- .../galaxy/dependency_resolution/providers.py | 29 ++++++++++++------- requirements.txt | 2 +- .../_data/requirements/ansible.txt | 2 +- .../code-smell/docs-build.requirements.txt | 2 +- .../code-smell/package-data.requirements.txt | 2 +- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/docs/docsite/known_good_reqs.txt b/docs/docsite/known_good_reqs.txt index 75323d13b02286..89101bab91aec2 100644 --- a/docs/docsite/known_good_reqs.txt +++ b/docs/docsite/known_good_reqs.txt @@ -9,7 +9,7 @@ docutils==0.16 jinja2==3.0.1 Pygments==2.9.0 PyYAML==5.4.1 -resolvelib==0.5.4 +resolvelib==0.8.1 rstcheck==3.3.1 sphinx==4.0.2 sphinx-notfound-page==0.7.1 # must be >= 0.6 diff --git a/lib/ansible/galaxy/dependency_resolution/providers.py b/lib/ansible/galaxy/dependency_resolution/providers.py index 35b2cedabca41b..2ff598612427cd 100644 --- a/lib/ansible/galaxy/dependency_resolution/providers.py +++ b/lib/ansible/galaxy/dependency_resolution/providers.py @@ -13,13 +13,6 @@ except ImportError: TYPE_CHECKING = False -if TYPE_CHECKING: - from typing import Iterable, List, NamedTuple, Optional, Union - from ansible.galaxy.collection.concrete_artifact_manager import ( - ConcreteArtifactsManager, - ) - from ansible.galaxy.collection.galaxy_api_proxy import MultiGalaxyAPIProxy - from ansible.galaxy.dependency_resolution.dataclasses import ( Candidate, Requirement, @@ -32,6 +25,16 @@ from resolvelib import AbstractProvider +if TYPE_CHECKING: + from typing import Iterable, Iterator, List, Mapping, Sequence, Union + from ansible.galaxy.collection.concrete_artifact_manager import ( + ConcreteArtifactsManager, + ) + from ansible.galaxy.collection.galaxy_api_proxy import MultiGalaxyAPIProxy + from resolvelib.providers import Preference + from resolvelib.resolvers import RequirementInformation + PreferenceInformation = RequirementInformation[Requirement, Candidate] + class CollectionDependencyProvider(AbstractProvider): """Delegate providing a requirement interface for the resolver.""" @@ -126,9 +129,11 @@ def identify(self, requirement_or_candidate): def get_preference( self, # type: CollectionDependencyProvider - resolution, # type: Optional[Candidate] - candidates, # type: List[Candidate] - information, # type: List[NamedTuple] + identifier, # type: str + resolutions, # type: Mapping[str, Candidate] + candidates, # type: Mapping[str, Iterator[Candidate]] + information, # type: Mapping[str, Iterable[PreferenceInformation]] + backtrack_causes, # type: Sequence[PreferenceInformation] ): # type: (...) -> Union[float, int] """Return sort key function return value for given requirement. @@ -173,6 +178,7 @@ def get_preference( the value is, the more preferred this requirement is (i.e. the sorting function is called with ``reverse=False``). """ + candidates = list(candidates[identifier]) if any( candidate in self._preferred_candidates for candidate in candidates @@ -182,7 +188,7 @@ def get_preference( return float('-inf') return len(candidates) - def find_matches(self, requirements): + def find_matches(self, identifier, requirements, incompatibilities): # type: (List[Requirement]) -> List[Candidate] r"""Find all possible candidates satisfying given requirements. @@ -208,6 +214,7 @@ def find_matches(self, requirements): # FIXME: its cloned tmp dir. Using only the first one creates # FIXME: loops that prevent any further dependency exploration. # FIXME: We need to figure out how to prevent this. + requirements = list(requirements[identifier]) first_req = requirements[0] fqcn = first_req.fqcn # The fqcn is guaranteed to be the same diff --git a/requirements.txt b/requirements.txt index a732a5951d2190..ddc114e23b0210 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,4 @@ packaging # NOTE: resolvelib 0.x version bumps should be considered major/breaking # NOTE: and we should update the upper cap with care, at least until 1.0 # NOTE: Ref: https://github.com/sarugaku/resolvelib/issues/69 -resolvelib >= 0.5.3, < 0.6.0 # dependency resolver used by ansible-galaxy +resolvelib >= 0.8.1, < 0.9.0 # dependency resolver used by ansible-galaxy diff --git a/test/lib/ansible_test/_data/requirements/ansible.txt b/test/lib/ansible_test/_data/requirements/ansible.txt index a732a5951d2190..ddc114e23b0210 100644 --- a/test/lib/ansible_test/_data/requirements/ansible.txt +++ b/test/lib/ansible_test/_data/requirements/ansible.txt @@ -10,4 +10,4 @@ packaging # NOTE: resolvelib 0.x version bumps should be considered major/breaking # NOTE: and we should update the upper cap with care, at least until 1.0 # NOTE: Ref: https://github.com/sarugaku/resolvelib/issues/69 -resolvelib >= 0.5.3, < 0.6.0 # dependency resolver used by ansible-galaxy +resolvelib >= 0.8.1, < 0.9.0 # dependency resolver used by ansible-galaxy diff --git a/test/sanity/code-smell/docs-build.requirements.txt b/test/sanity/code-smell/docs-build.requirements.txt index 1462ae9aa5f76b..90269452f0c60a 100644 --- a/test/sanity/code-smell/docs-build.requirements.txt +++ b/test/sanity/code-smell/docs-build.requirements.txt @@ -27,7 +27,7 @@ pyparsing==2.4.7 pytz==2021.3 PyYAML==6.0 requests==2.26.0 -resolvelib==0.5.4 +resolvelib==0.8.1 rstcheck==3.3.1 semantic-version==2.8.5 sh==1.14.2 diff --git a/test/sanity/code-smell/package-data.requirements.txt b/test/sanity/code-smell/package-data.requirements.txt index 8b08b9a34e1af2..0becbc85ca1fbb 100644 --- a/test/sanity/code-smell/package-data.requirements.txt +++ b/test/sanity/code-smell/package-data.requirements.txt @@ -6,7 +6,7 @@ MarkupSafe==2.0.1 packaging==21.2 pyparsing==2.4.7 PyYAML==6.0 -resolvelib==0.5.4 +resolvelib==0.8.1 rstcheck==3.3.1 semantic-version==2.8.5 straight.plugin==1.5.0