Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: python-poetry/poetry
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ae17ac323dfda5631498e9969fdb228efc0836a9
Choose a base ref
..
head repository: python-poetry/poetry
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 48fa40b8987fddb3ce61f2485934e503fddc4aed
Choose a head ref
Showing with 92 additions and 0 deletions.
  1. +3 −0 src/poetry/mixology/version_solver.py
  2. +47 −0 tests/installation/fixtures/with-vcs-dependency-with-extras.test
  3. +42 −0 tests/installation/test_installer.py
3 changes: 3 additions & 0 deletions src/poetry/mixology/version_solver.py
Original file line number Diff line number Diff line change
@@ -507,6 +507,9 @@ def _get_locked(self, dependency: Dependency) -> DependencyPackage | None:
for dependency_package in locked:
package = dependency_package.package
if (
# Locked dependencies are always without features.
# Thus, we can't use is_same_package_as() here because it compares
# the complete_name (including features).
dependency.name == package.name
and dependency.is_same_source_as(package)
and dependency.constraint.allows(package.version)
47 changes: 47 additions & 0 deletions tests/installation/fixtures/with-vcs-dependency-with-extras.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
[[package]]
name = "demo"
version = "0.1.2"
description = ""
category = "main"
optional = false
python-versions = "*"
develop = false

[package.dependencies]
cleo = {version = "*", optional = true, markers = "extra == \"foo\""}
pendulum = ">=1.4.4"

[package.extras]
foo = ["cleo"]

[package.source]
type = "git"
url = "https://github.com/demo/demo.git"
reference = "master"
resolved_reference = "123456"

[[package]]
name = "pendulum"
version = "1.4.4"
description = ""
category = "main"
optional = false
python-versions = "*"

[[package]]
name = "cleo"
version = "1.0.0"
description = ""
category = "main"
optional = false
python-versions = "*"

[metadata]
python-versions = "*"
lock-version = "1.1"
content-hash = "123456789"

[metadata.files]
demo = []
pendulum = []
cleo = []
42 changes: 42 additions & 0 deletions tests/installation/test_installer.py
Original file line number Diff line number Diff line change
@@ -2473,3 +2473,45 @@ def test_installer_should_use_the_locked_version_of_git_dependencies(
source_reference="master",
source_resolved_reference="123456",
)


@pytest.mark.parametrize("is_locked", [False, True])
def test_installer_should_use_the_locked_version_of_git_dependencies_with_extras(
installer: Installer,
locker: Locker,
package: ProjectPackage,
repo: Repository,
is_locked: bool,
):
if is_locked:
locker.locked(True)
locker.mock_lock_data(fixture("with-vcs-dependency-with-extras"))
expected_reference = "123456"
else:
expected_reference = "9cf87a285a2d3fbb0b9fa621997b3acc3631ed24"

package.add_dependency(
Factory.create_dependency(
"demo",
{
"git": "https://github.com/demo/demo.git",
"branch": "master",
"extras": ["foo"],
},
)
)

repo.add_package(get_package("pendulum", "1.4.4"))
repo.add_package(get_package("cleo", "1.0.0"))

installer.run()

assert len(installer.executor.installations) == 3
assert installer.executor.installations[-1] == Package(
"demo",
"0.1.2",
source_type="git",
source_url="https://github.com/demo/demo.git",
source_reference="master",
source_resolved_reference=expected_reference,
)