Commit da6014c9 by Sébastien Eustace

Fix handling of git dependencies with extras

parent 8e49e901
...@@ -90,7 +90,7 @@ def dependency_from_pep_508(name): ...@@ -90,7 +90,7 @@ def dependency_from_pep_508(name):
for or_ in markers["extra"]: for or_ in markers["extra"]:
for _, extra in or_: for _, extra in or_:
dep.extras.append(extra) dep.in_extras.append(extra)
if "python_version" in markers: if "python_version" in markers:
ors = [] ors = []
......
...@@ -209,7 +209,15 @@ class Provider: ...@@ -209,7 +209,15 @@ class Provider:
package = Package(meta.name, meta.version) package = Package(meta.name, meta.version)
for req in reqs: for req in reqs:
package.requires.append(dependency_from_pep_508(req)) dep = dependency_from_pep_508(req)
if dep.in_extras:
for extra in dep.in_extras:
if extra not in package.extras:
package.extras[extra] = []
package.extras[extra].append(dep)
package.requires.append(dep)
except Exception: except Exception:
raise raise
finally: finally:
...@@ -231,6 +239,12 @@ class Provider: ...@@ -231,6 +239,12 @@ class Provider:
) )
) )
if dependency.extras:
for extra in dependency.extras:
if extra in package.extras:
for dep in package.extras[extra]:
dep.activate()
return [package] return [package]
def search_for_file(self, dependency): # type: (FileDependency) -> List[Package] def search_for_file(self, dependency): # type: (FileDependency) -> List[Package]
...@@ -314,10 +328,10 @@ class Provider: ...@@ -314,10 +328,10 @@ class Provider:
] ]
def complete_package(self, package): # type: (str, Version) -> Package def complete_package(self, package): # type: (str, Version) -> Package
if package.is_root() or package.source_type in {"git", "file"}: if package.is_root():
return package return package
if package.source_type != "directory": if package.source_type not in {"directory", "file", "git"}:
package = self._pool.package( package = self._pool.package(
package.name, package.version.text, extras=package.requires_extras package.name, package.version.text, extras=package.requires_extras
) )
......
...@@ -155,8 +155,8 @@ class PyPiRepository(Repository): ...@@ -155,8 +155,8 @@ class PyPiRepository(Repository):
) )
continue continue
if dependency.extras: if dependency.in_extras:
for extra in dependency.extras: for extra in dependency.in_extras:
if extra not in package.extras: if extra not in package.extras:
package.extras[extra] = [] package.extras[extra] = []
......
...@@ -13,6 +13,7 @@ kwargs = dict( ...@@ -13,6 +13,7 @@ kwargs = dict(
url="https://github.com/demo/demo", url="https://github.com/demo/demo",
packages=["demo"], packages=["demo"],
install_requires=["pendulum>=1.4.4"], install_requires=["pendulum>=1.4.4"],
extras_require={"foo": ["cleo"]},
) )
......
...@@ -39,7 +39,7 @@ def test_dependency_from_pep_508_with_extras(): ...@@ -39,7 +39,7 @@ def test_dependency_from_pep_508_with_extras():
assert dep.name == "requests" assert dep.name == "requests"
assert str(dep.constraint) == "2.18.0" assert str(dep.constraint) == "2.18.0"
assert dep.extras == ["foo", "bar"] assert dep.in_extras == ["foo", "bar"]
def test_dependency_from_pep_508_with_python_version(): def test_dependency_from_pep_508_with_python_version():
...@@ -84,7 +84,7 @@ def test_dependency_from_pep_508_complex(): ...@@ -84,7 +84,7 @@ def test_dependency_from_pep_508_complex():
assert dep.name == "requests" assert dep.name == "requests"
assert str(dep.constraint) == "2.18.0" assert str(dep.constraint) == "2.18.0"
assert dep.extras == ["foo"] assert dep.in_extras == ["foo"]
assert dep.python_versions == ">=2.7 !=3.2.*" assert dep.python_versions == ">=2.7 !=3.2.*"
assert dep.platform == "win32 || darwin" assert dep.platform == "win32 || darwin"
......
...@@ -12,6 +12,7 @@ from poetry.puzzle.exceptions import SolverProblemError ...@@ -12,6 +12,7 @@ from poetry.puzzle.exceptions import SolverProblemError
from tests.helpers import get_dependency from tests.helpers import get_dependency
from tests.helpers import get_package from tests.helpers import get_package
from tests.repositories.test_pypi_repository import MockRepository
@pytest.fixture() @pytest.fixture()
...@@ -921,3 +922,44 @@ def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency( ...@@ -921,3 +922,44 @@ def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency(
{"job": "install", "package": package_a}, {"job": "install", "package": package_a},
], ],
) )
def test_solver_can_resolve_git_dependencies(solver, repo, package):
pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum)
repo.add_package(cleo)
package.add_dependency("demo", {"git": "https://github.com/demo/demo.git"})
ops = solver.solve()
check_solver_result(
ops,
[
{"job": "install", "package": pendulum},
{"job": "install", "package": get_package("demo", "0.1.2")},
],
)
def test_solver_can_resolve_git_dependencies_with_extras(solver, repo, package):
pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum)
repo.add_package(cleo)
package.add_dependency(
"demo", {"git": "https://github.com/demo/demo.git", "extras": ["foo"]}
)
ops = solver.solve()
check_solver_result(
ops,
[
{"job": "install", "package": cleo},
{"job": "install", "package": pendulum},
{"job": "install", "package": get_package("demo", "0.1.2")},
],
)
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