diff --git a/crates/uv/src/commands/python/install.rs b/crates/uv/src/commands/python/install.rs index 22640239e..0fcaa24f7 100644 --- a/crates/uv/src/commands/python/install.rs +++ b/crates/uv/src/commands/python/install.rs @@ -551,19 +551,28 @@ pub(crate) async fn install( printer.stderr(), "There are no installed versions to upgrade" )?; - } else if requests.len() > 1 { + } else if upgrade && is_unspecified_upgrade { + writeln!( + printer.stderr(), + "All versions already on latest supported patch release" + )?; + } else if let [request] = requests.as_slice() { + // Convert to the inner request + let request = &request.request; if upgrade { - if is_unspecified_upgrade { - writeln!( - printer.stderr(), - "All versions already on latest supported patch release" - )?; - } else { - writeln!( - printer.stderr(), - "All requested versions already on latest supported patch release" - )?; - } + writeln!( + printer.stderr(), + "{request} is already on the latest supported patch release" + )?; + } else { + writeln!(printer.stderr(), "{request} is already installed")?; + } + } else { + if upgrade { + writeln!( + printer.stderr(), + "All requested versions already on latest supported patch release" + )?; } else { writeln!(printer.stderr(), "All requested versions already installed")?; } diff --git a/crates/uv/tests/it/python_install.rs b/crates/uv/tests/it/python_install.rs index b36d590f4..46f5f7701 100644 --- a/crates/uv/tests/it/python_install.rs +++ b/crates/uv/tests/it/python_install.rs @@ -88,13 +88,14 @@ fn python_install() { "###); // Similarly, when a requested version is already installed - uv_snapshot!(context.filters(), context.python_install().arg("3.13"), @r###" + uv_snapshot!(context.filters(), context.python_install().arg("3.13"), @r" success: true exit_code: 0 ----- stdout ----- ----- stderr ----- - "###); + Python 3.13 is already installed + "); // You can opt-in to a reinstall uv_snapshot!(context.filters(), context.python_install().arg("3.13").arg("--reinstall"), @r" @@ -716,6 +717,7 @@ fn python_install_preview() { ----- stdout ----- ----- stderr ----- + Python 3.13 is already installed "); uv_snapshot!(context.filters(), context.python_install().arg("--preview").arg("3.13").env(EnvVars::UV_PYTHON_INSTALL_BIN, "0"), @r" success: true @@ -723,6 +725,7 @@ fn python_install_preview() { ----- stdout ----- ----- stderr ----- + Python 3.13 is already installed "); uv_snapshot!(context.filters(), context.python_install().arg("--preview").arg("--force").arg("3.13"), @r" @@ -2596,13 +2599,14 @@ fn python_install_no_cache() { "###); // Similarly, when a requested version is already installed - uv_snapshot!(context.filters(), context.python_install().arg("3.13"), @r###" + uv_snapshot!(context.filters(), context.python_install().arg("3.13"), @r" success: true exit_code: 0 ----- stdout ----- ----- stderr ----- - "###); + Python 3.13 is already installed + "); // You can opt-in to a reinstall uv_snapshot!(context.filters(), context.python_install().arg("3.13").arg("--reinstall"), @r" diff --git a/crates/uv/tests/it/python_upgrade.rs b/crates/uv/tests/it/python_upgrade.rs index 9f00d1c4f..7fcba4395 100644 --- a/crates/uv/tests/it/python_upgrade.rs +++ b/crates/uv/tests/it/python_upgrade.rs @@ -51,6 +51,7 @@ fn python_upgrade() { ----- stdout ----- ----- stderr ----- + Python 3.10 is already on the latest supported patch release "); // Should reinstall on `--reinstall`