mirror of https://github.com/pypa/pip
Merge pull request #7888 from uranusjr/resolver-progress
Implement ignore_dependencies in new resolver
This commit is contained in:
commit
4f64052676
|
@ -20,11 +20,13 @@ class PipProvider(AbstractProvider):
|
|||
self,
|
||||
finder, # type: PackageFinder
|
||||
preparer, # type: RequirementPreparer
|
||||
ignore_dependencies, # type: bool
|
||||
make_install_req # type: InstallRequirementProvider
|
||||
):
|
||||
# type: (...) -> None
|
||||
self._finder = finder
|
||||
self._preparer = preparer
|
||||
self._ignore_dependencies = ignore_dependencies
|
||||
self._make_install_req = make_install_req
|
||||
|
||||
def make_requirement(self, ireq):
|
||||
|
@ -72,6 +74,8 @@ class PipProvider(AbstractProvider):
|
|||
|
||||
def get_dependencies(self, candidate):
|
||||
# type: (Candidate) -> Sequence[Requirement]
|
||||
if self._ignore_dependencies:
|
||||
return []
|
||||
return [
|
||||
make_requirement(
|
||||
r,
|
||||
|
|
|
@ -57,9 +57,6 @@ class ExplicitRequirement(Requirement):
|
|||
|
||||
def is_satisfied_by(self, candidate):
|
||||
# type: (Candidate) -> bool
|
||||
# TODO: Typing - Candidate doesn't have a link attribute
|
||||
# But I think the following would be better...
|
||||
# return candidate.link == self.candidate.link
|
||||
return candidate == self.candidate
|
||||
|
||||
|
||||
|
@ -104,7 +101,6 @@ class SpecifierRequirement(Requirement):
|
|||
|
||||
def is_satisfied_by(self, candidate):
|
||||
# type: (Candidate) -> bool
|
||||
|
||||
assert candidate.name == self.name, \
|
||||
"Internal issue: Candidate is not for this requirement " \
|
||||
" {} vs {}".format(candidate.name, self.name)
|
||||
|
|
|
@ -37,15 +37,17 @@ class Resolver(BaseResolver):
|
|||
super(Resolver, self).__init__()
|
||||
self.finder = finder
|
||||
self.preparer = preparer
|
||||
self.ignore_dependencies = ignore_dependencies
|
||||
self.make_install_req = make_install_req
|
||||
self._result = None # type: Optional[Result]
|
||||
|
||||
def resolve(self, root_reqs, check_supported_wheels):
|
||||
# type: (List[InstallRequirement], bool) -> RequirementSet
|
||||
provider = PipProvider(
|
||||
self.finder,
|
||||
self.preparer,
|
||||
self.make_install_req,
|
||||
finder=self.finder,
|
||||
preparer=self.preparer,
|
||||
ignore_dependencies=self.ignore_dependencies,
|
||||
make_install_req=self.make_install_req,
|
||||
)
|
||||
reporter = BaseReporter()
|
||||
resolver = RLResolver(provider, reporter)
|
||||
|
|
|
@ -9,7 +9,15 @@ def assert_installed(script, **kwargs):
|
|||
(val['name'], val['version'])
|
||||
for val in json.loads(ret.stdout)
|
||||
)
|
||||
assert set(kwargs.items()) <= installed
|
||||
assert all(item in installed for item in kwargs.items()), \
|
||||
"{!r} not all in {!r}".format(kwargs, installed)
|
||||
|
||||
|
||||
def assert_not_installed(script, *args):
|
||||
ret = script.pip("list", "--format=json")
|
||||
installed = set(val["name"] for val in json.loads(ret.stdout))
|
||||
assert all(a not in installed for a in args), \
|
||||
"{!r} contained in {!r}".format(args, installed)
|
||||
|
||||
|
||||
def test_new_resolver_can_install(script):
|
||||
|
@ -81,3 +89,25 @@ def test_new_resolver_installs_dependencies(script):
|
|||
"base"
|
||||
)
|
||||
assert_installed(script, base="0.1.0", dep="0.1.0")
|
||||
|
||||
|
||||
def test_new_resolver_ignore_dependencies(script):
|
||||
create_basic_wheel_for_package(
|
||||
script,
|
||||
"base",
|
||||
"0.1.0",
|
||||
depends=["dep"],
|
||||
)
|
||||
create_basic_wheel_for_package(
|
||||
script,
|
||||
"dep",
|
||||
"0.1.0",
|
||||
)
|
||||
script.pip(
|
||||
"install", "--unstable-feature=resolver",
|
||||
"--no-cache-dir", "--no-index", "--no-deps",
|
||||
"--find-links", script.scratch_path,
|
||||
"base"
|
||||
)
|
||||
assert_installed(script, base="0.1.0")
|
||||
assert_not_installed(script, "dep")
|
||||
|
|
|
@ -55,4 +55,9 @@ def provider(finder, preparer):
|
|||
wheel_cache=None,
|
||||
use_pep517=None,
|
||||
)
|
||||
yield PipProvider(finder, preparer, make_install_req)
|
||||
yield PipProvider(
|
||||
finder=finder,
|
||||
preparer=preparer,
|
||||
ignore_dependencies=False,
|
||||
make_install_req=make_install_req,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue