Commit b6e24401 by David Hotham Committed by Bjorn Neergaard

Fix dropped markers in dependency walk

parent b430c1f5
...@@ -247,16 +247,15 @@ class Locker: ...@@ -247,16 +247,15 @@ class Locker:
locked_package.to_dependency().constraint locked_package.to_dependency().constraint
) )
if key not in nested_dependencies: for require in locked_package.requires:
for require in locked_package.requires: if require.marker.is_empty():
if require.marker.is_empty(): require.marker = requirement.marker
require.marker = requirement.marker else:
else: require.marker = require.marker.intersect(requirement.marker)
require.marker = require.marker.intersect(
requirement.marker require.marker = require.marker.intersect(locked_package.marker)
)
require.marker = require.marker.intersect(locked_package.marker) if key not in nested_dependencies:
next_level_dependencies.append(require) next_level_dependencies.append(require)
if requirement.name in project_level_dependencies and level == 0: if requirement.name in project_level_dependencies and level == 0:
......
...@@ -943,6 +943,79 @@ foo==1.2.3 ...@@ -943,6 +943,79 @@ foo==1.2.3
assert expected == content assert expected == content
def test_exporter_can_export_requirements_txt_with_nested_packages_and_multiple_markers(
tmp_dir, poetry
):
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "foo",
"version": "1.2.3",
"category": "main",
"optional": False,
"python-versions": "*",
"dependencies": {
"bar": [
{
"version": ">=1.2.3,<7.8.10",
"markers": 'platform_system != "Windows"',
},
{
"version": ">=4.5.6,<7.8.10",
"markers": 'platform_system == "Windows"',
},
]
},
},
{
"name": "bar",
"version": "7.8.9",
"category": "main",
"optional": True,
"python-versions": "*",
"dependencies": {
"baz": {
"version": "!=10.11.12",
"markers": 'platform_system == "Windows"',
}
},
},
{
"name": "baz",
"version": "10.11.13",
"category": "main",
"optional": True,
"python-versions": "*",
},
],
"metadata": {
"python-versions": "*",
"content-hash": "123456789",
"hashes": {"foo": [], "bar": [], "baz": []},
},
}
)
set_package_requires(poetry)
exporter = Exporter(poetry)
exporter.export(
"requirements.txt", Path(tmp_dir), "requirements.txt", with_hashes=False
)
with (Path(tmp_dir) / "requirements.txt").open(encoding="utf-8") as f:
content = f.read()
expected = """\
bar==7.8.9; platform_system != "Windows" or platform_system == "Windows"
baz==10.11.13; platform_system == "Windows"
foo==1.2.3
"""
assert expected == content
def test_exporter_can_export_requirements_txt_with_git_packages_and_markers( def test_exporter_can_export_requirements_txt_with_git_packages_and_markers(
tmp_dir, poetry tmp_dir, poetry
): ):
......
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