Commit e89ad9af by Sébastien Eustace

Fix packages not found for prerelease version constraints when resolving dependencies.

parent 1ec6a025
# Change Log # Change Log
## [Unreleased]
### Fixed
- Fixed packages not found for prerelease version constraints when resolving dependencies.
## [0.10.0] - 2018-05-28 ## [0.10.0] - 2018-05-28
### Added ### Added
......
...@@ -122,11 +122,11 @@ class Provider: ...@@ -122,11 +122,11 @@ class Provider:
) )
packages.sort( packages.sort(
key=cmp_to_key( key=lambda p: (
lambda x, y: not p.is_prerelease() and not dependency.allows_prereleases(),
0 if x.version == y.version p.version
else int(x.version < y.version or -1) ),
) reverse=True
) )
self._search_for[dependency] = packages self._search_for[dependency] = packages
......
...@@ -108,7 +108,7 @@ class PyPiRepository(Repository): ...@@ -108,7 +108,7 @@ class PyPiRepository(Repository):
package = Package(name, version) package = Package(name, version)
if package.is_prerelease() and not allow_prereleases: if package.is_prerelease() and not allow_prereleases and not constraint.allows(package.version):
continue continue
if ( if (
......
...@@ -49,7 +49,11 @@ class Repository(BaseRepository): ...@@ -49,7 +49,11 @@ class Repository(BaseRepository):
for package in self.packages: for package in self.packages:
if name == package.name: if name == package.name:
if package.is_prerelease() and not allow_prereleases: if (
package.is_prerelease()
and not allow_prereleases
and not constraint.allows(package.version)
):
continue continue
if constraint is None or constraint.allows(package.version): if constraint is None or constraint.allows(package.version):
......
...@@ -665,3 +665,25 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_ ...@@ -665,3 +665,25 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
assert b.category == 'main' assert b.category == 'main'
assert a.category == 'main' assert a.category == 'main'
assert e.category == 'main' assert e.category == 'main'
def test_solver_with_dependency_and_prerelease_sub_dependencies(solver, repo, package):
package.add_dependency('A')
package_a = get_package('A', '1.0')
package_a.add_dependency('B', '>=1.0.0.dev2')
repo.add_package(package_a)
repo.add_package(get_package('B', '0.9.0'))
repo.add_package(get_package('B', '1.0.0.dev1'))
repo.add_package(get_package('B', '1.0.0.dev2'))
repo.add_package(get_package('B', '1.0.0.dev3'))
package_b = get_package('B', '1.0.0.dev4')
repo.add_package(package_b)
ops = solver.solve()
check_solver_result(ops, [
{'job': 'install', 'package': package_b},
{'job': 'install', 'package': package_a},
])
...@@ -41,6 +41,13 @@ def test_find_packages(): ...@@ -41,6 +41,13 @@ def test_find_packages():
assert len(packages) == 5 assert len(packages) == 5
def test_find_packages_with_prereleases():
repo = MockRepository()
packages = repo.find_packages('toga', '>=0.3.0.dev2')
assert len(packages) == 7
def test_package(): def test_package():
repo = MockRepository() repo = MockRepository()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment