Commit cc715ef8 by Sébastien Eustace

Fix a conflict error for locked conditional dependencies

parent e3b974c6
...@@ -19,6 +19,7 @@ from .dependency import Dependency ...@@ -19,6 +19,7 @@ from .dependency import Dependency
from .directory_dependency import DirectoryDependency from .directory_dependency import DirectoryDependency
from .file_dependency import FileDependency from .file_dependency import FileDependency
from .vcs_dependency import VCSDependency from .vcs_dependency import VCSDependency
from .utils.utils import convert_markers
from .utils.utils import create_nested_marker from .utils.utils import create_nested_marker
AUTHOR_REGEX = re.compile("(?u)^(?P<name>[- .,\w\d'’\"()]+)(?: <(?P<email>.+?)>)?$") AUTHOR_REGEX = re.compile("(?u)^(?P<name>[- .,\w\d'’\"()]+)(?: <(?P<email>.+?)>)?$")
...@@ -326,7 +327,14 @@ class Package(object): ...@@ -326,7 +327,14 @@ class Package(object):
return dependency return dependency
def to_dependency(self): def to_dependency(self):
return Dependency(self.name, self._version) from . import dependency_from_pep_508
name = "{} (=={})".format(self._name, self._version)
if not self.marker.is_any():
name += " ; {}".format(str(self.marker))
return dependency_from_pep_508(name)
@contextmanager @contextmanager
def with_python_versions(self, python_versions): def with_python_versions(self, python_versions):
......
...@@ -10,6 +10,7 @@ from poetry.repositories.pool import Pool ...@@ -10,6 +10,7 @@ from poetry.repositories.pool import Pool
from poetry.repositories.repository import Repository from poetry.repositories.repository import Repository
from poetry.puzzle import Solver from poetry.puzzle import Solver
from poetry.puzzle.exceptions import SolverProblemError from poetry.puzzle.exceptions import SolverProblemError
from poetry.version.markers import parse_marker
from tests.helpers import get_dependency from tests.helpers import get_dependency
from tests.helpers import get_package from tests.helpers import get_package
...@@ -1073,3 +1074,33 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl ...@@ -1073,3 +1074,33 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl
'extra == "bar" or extra == "foo"', 'extra == "bar" or extra == "foo"',
] ]
assert str(ops[1].package.marker) == "" assert str(ops[1].package.marker) == ""
def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies(
solver, repo, package
):
package.python_versions = "~2.7 || ^3.4"
package.add_dependency("A", {"version": "^1.0", "python": "^3.6"})
package.add_dependency("B", "^1.0")
package_a = get_package("A", "1.0.0")
package_a.python_versions = ">=3.6"
package_a.marker = parse_marker(
'python_version >= "3.6" and python_version < "4.0"'
)
package_b = get_package("B", "1.0.0")
repo.add_package(package_a)
repo.add_package(package_b)
solver._locked = Repository([package_a])
ops = solver.solve(use_latest=[package_b.name])
check_solver_result(
ops,
[
{"job": "install", "package": package_a},
{"job": "install", "package": package_b},
],
)
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