Commit 89575f6f by Sébastien Eustace Committed by GitHub

Merge pull request #4246 from zumper/m.4245-relative-paths

fix: create path dependencies relative to package rather than lockfile (#4245)
parents c5cee344 97e63f62
......@@ -177,20 +177,22 @@ class Locker:
package.marker = parse_marker(split_dep[1].strip())
for dep_name, constraint in info.get("dependencies", {}).items():
root_dir = self._lock.path.parent
if package.source_type == "directory":
# root dir should be the source of the package relative to the lock path
root_dir = Path(package.source_url)
if isinstance(constraint, list):
for c in constraint:
package.add_dependency(
Factory.create_dependency(
dep_name, c, root_dir=self._lock.path.parent
)
Factory.create_dependency(dep_name, c, root_dir=root_dir)
)
continue
package.add_dependency(
Factory.create_dependency(
dep_name, constraint, root_dir=self._lock.path.parent
)
Factory.create_dependency(dep_name, constraint, root_dir=root_dir)
)
if "develop" in info:
......
......@@ -348,7 +348,7 @@ A = []
def test_reading_lock_file_should_raise_an_error_on_invalid_data(locker):
content = u"""[[package]]
content = """[[package]]
name = "A"
version = "1.0.0"
description = ""
......@@ -598,3 +598,47 @@ A = []
"""
assert expected == content
def test_locked_repository_uses_root_dir_of_package(locker, mocker):
content = """\
[[package]]
name = "lib-a"
version = "0.1.0"
description = ""
category = "main"
optional = false
python-versions = "^2.7.9"
develop = true
[package.dependencies]
lib-b = {path = "../libB", develop = true}
[package.source]
type = "directory"
url = "lib/libA"
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8"
[metadata.files]
lib-a = []
lib-b = []
"""
locker.lock.write(tomlkit.parse(content))
create_dependency_patch = mocker.patch(
"poetry.factory.Factory.create_dependency", autospec=True
)
locker.locked_repository()
create_dependency_patch.assert_called_once_with(
"lib-b", {"develop": True, "path": "../libB"}, root_dir=mocker.ANY
)
call_kwargs = create_dependency_patch.call_args[1]
root_dir = call_kwargs["root_dir"]
assert root_dir.match("*/lib/libA")
# relative_to raises an exception if not relative - is_relative_to comes in py3.9
assert root_dir.relative_to(locker.lock.path.parent.resolve()) is not None
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