From a4f125ca341f080ba2d9e239e07f6de526b2f44d Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 22 Apr 2024 12:29:19 -0400 Subject: [PATCH] Avoid waiting for metadata for `--no-deps` editables (#3188) ## Summary We don't emit a request for this, so we shouldn't wait for it either -- we already have the metadata! Closes https://github.com/astral-sh/uv/issues/3184. --- crates/uv-resolver/src/resolver/mod.rs | 2 +- crates/uv/tests/pip_install.rs | 27 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index 6f3f0640ed16..9d23c52442d7 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -864,7 +864,7 @@ impl< if self.dependency_mode.is_direct() { // If an extra is provided, wait for the metadata to be available, since it's // still required for reporting diagnostics. - if extra.is_some() { + if extra.is_some() && self.editables.get(package_name).is_none() { // Determine the distribution to lookup. let dist = match url { Some(url) => PubGrubDistribution::from_url(package_name, url), diff --git a/crates/uv/tests/pip_install.rs b/crates/uv/tests/pip_install.rs index cd8a729005bb..346d53018ef1 100644 --- a/crates/uv/tests/pip_install.rs +++ b/crates/uv/tests/pip_install.rs @@ -1495,6 +1495,33 @@ fn no_deps() { context.assert_command("import flask").failure(); } +/// Install an editable package from the command line into a virtual environment, ignoring its +/// dependencies. +#[test] +fn no_deps_editable() { + let context = TestContext::new("3.12"); + + // Install the editable version of Black. This should remove the registry-based version. + uv_snapshot!(context.filters(), context.install() + .arg("--no-deps") + .arg("-e") + .arg(context.workspace_root.join("scripts/packages/black_editable[dev]")), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Built 1 editable in [TIME] + Resolved 1 package in [TIME] + Installed 1 package in [TIME] + + black==0.1.0 (from file://[WORKSPACE]/scripts/packages/black_editable) + "### + ); + + context.assert_command("import black").success(); + context.assert_command("import aiohttp").failure(); +} + /// Upgrade a package. #[test] fn install_upgrade() {