Skip to content

Commit

Permalink
Merge pull request #4246 from zumper/m.4245-relative-paths
Browse files Browse the repository at this point in the history
fix: create path dependencies relative to package rather than lockfile (#4245)
  • Loading branch information
sdispater authored Jul 29, 2021
2 parents c5cee34 + 97e63f6 commit 89575f6
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 7 deletions.
14 changes: 8 additions & 6 deletions poetry/packages/locker.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,20 +177,22 @@ def locked_repository(
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:
Expand Down
46 changes: 45 additions & 1 deletion tests/packages/test_locker.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ def test_lock_file_should_not_have_mixed_types(locker, root):


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 = ""
Expand Down Expand Up @@ -598,3 +598,47 @@ def test_locker_dumps_dependency_information_correctly(locker, root):
"""

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

0 comments on commit 89575f6

Please sign in to comment.