summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pip/_internal/resolution/resolvelib/candidates.py4
-rw-r--r--tests/functional/test_install_report.py46
2 files changed, 49 insertions, 1 deletions
diff --git a/src/pip/_internal/resolution/resolvelib/candidates.py b/src/pip/_internal/resolution/resolvelib/candidates.py
index b1ff28288..39af0d5db 100644
--- a/src/pip/_internal/resolution/resolvelib/candidates.py
+++ b/src/pip/_internal/resolution/resolvelib/candidates.py
@@ -79,7 +79,7 @@ def make_install_req_from_editable(
link: Link, template: InstallRequirement
) -> InstallRequirement:
assert template.editable, "template not editable"
- return install_req_from_editable(
+ ireq = install_req_from_editable(
link.url,
user_supplied=template.user_supplied,
comes_from=template.comes_from,
@@ -91,6 +91,8 @@ def make_install_req_from_editable(
hash_options=template.hash_options,
config_settings=template.config_settings,
)
+ ireq.extras = template.extras
+ return ireq
def _make_install_req_from_dist(
diff --git a/tests/functional/test_install_report.py b/tests/functional/test_install_report.py
index e7fec8985..b8df6936f 100644
--- a/tests/functional/test_install_report.py
+++ b/tests/functional/test_install_report.py
@@ -224,6 +224,52 @@ def test_install_report_local_path_with_extras(
assert "requested_extras" not in simple_report
+@pytest.mark.network
+def test_install_report_editable_local_path_with_extras(
+ script: PipTestEnvironment, tmp_path: Path, shared_data: TestData
+) -> None:
+ """Test report remote editable."""
+ project_path = tmp_path / "pkga"
+ project_path.mkdir()
+ project_path.joinpath("pyproject.toml").write_text(
+ textwrap.dedent(
+ """\
+ [project]
+ name = "pkga"
+ version = "1.0"
+
+ [project.optional-dependencies]
+ test = ["simple"]
+ """
+ )
+ )
+ report_path = tmp_path / "report.json"
+ script.pip(
+ "install",
+ "--dry-run",
+ "--no-build-isolation",
+ "--no-index",
+ "--find-links",
+ str(shared_data.root / "packages/"),
+ "--report",
+ str(report_path),
+ "--editable",
+ str(project_path) + "[test]",
+ )
+ report = json.loads(report_path.read_text())
+ assert len(report["install"]) == 2
+ pkga_report = report["install"][0]
+ assert pkga_report["metadata"]["name"] == "pkga"
+ assert pkga_report["is_direct"] is True
+ assert pkga_report["requested"] is True
+ assert pkga_report["requested_extras"] == ["test"]
+ simple_report = report["install"][1]
+ assert simple_report["metadata"]["name"] == "simple"
+ assert simple_report["is_direct"] is False
+ assert simple_report["requested"] is False
+ assert "requested_extras" not in simple_report
+
+
def test_install_report_to_stdout(
script: PipTestEnvironment, shared_data: TestData
) -> None: