Skip to content

Commit

Permalink
fix: create path dependencies relative to package rather than lockfile (
Browse files Browse the repository at this point in the history
  • Loading branch information
md384 committed Jul 2, 2021
1 parent 22c3aad commit 4275a55
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 7 deletions.
18 changes: 12 additions & 6 deletions poetry/packages/locker.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,20 +176,26 @@ 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(
os.path.relpath(
Path(package.source_url), self._lock.path.parent
)
).resolve()

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
44 changes: 43 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,45 @@ 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
)
root_dir = create_dependency_patch.call_args.kwargs["root_dir"]
assert root_dir.match("*/lib/libA")
assert root_dir.is_relative_to(locker.lock.path.parent.resolve())

0 comments on commit 4275a55

Please sign in to comment.