From b466770447a893fc0a2540d9c1468024886935e5 Mon Sep 17 00:00:00 2001 From: shikinamiasuka Date: Tue, 9 Dec 2025 01:34:45 +0800 Subject: [PATCH 1/3] Fix relocatable nushell activation script --- crates/uv-virtualenv/src/activator/activate.nu | 2 +- crates/uv-virtualenv/src/virtualenv.rs | 9 ++++++++- crates/uv/tests/it/venv.rs | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/crates/uv-virtualenv/src/activator/activate.nu b/crates/uv-virtualenv/src/activator/activate.nu index a1306799499aa..6543a4fe15ef7 100644 --- a/crates/uv-virtualenv/src/activator/activate.nu +++ b/crates/uv-virtualenv/src/activator/activate.nu @@ -68,7 +68,7 @@ export-env { } } - let virtual_env = '{{ VIRTUAL_ENV_DIR }}' + let virtual_env = {{ VIRTUAL_ENV_DIR }} let bin = '{{ BIN_NAME }}' let path_name = if (has-env 'Path') { 'Path' } else { 'PATH' } let venv_path = ([$virtual_env $bin] | path join) diff --git a/crates/uv-virtualenv/src/virtualenv.rs b/crates/uv-virtualenv/src/virtualenv.rs index 04b4c101664bc..fb023f55ff0f4 100644 --- a/crates/uv-virtualenv/src/virtualenv.rs +++ b/crates/uv-virtualenv/src/virtualenv.rs @@ -463,8 +463,15 @@ pub(crate) fn create( (true, "activate.fish") => { r#"'"$(dirname -- "$(cd "$(dirname -- "$(status -f)")"; and pwd)")"'"#.to_string() } + (true, "activate.nu") => r#"(path self | path dirname | path dirname)"#.to_string(), + (false, "activate.nu") => { + format!( + "'{}'", + escape_posix_for_single_quotes(location.simplified().to_str().unwrap()) + ) + } // Note: - // * relocatable activate scripts appear not to be possible in csh and nu shell + // * relocatable activate scripts appear not to be possible in csh. // * `activate.ps1` is already relocatable by default. _ => escape_posix_for_single_quotes(location.simplified().to_str().unwrap()), }; diff --git a/crates/uv/tests/it/venv.rs b/crates/uv/tests/it/venv.rs index fa5a0161dceff..98879fc6ab1e4 100644 --- a/crates/uv/tests/it/venv.rs +++ b/crates/uv/tests/it/venv.rs @@ -1296,6 +1296,12 @@ fn verify_pyvenv_cfg_relocatable() { let activate_fish = scripts.child("activate.fish"); activate_fish.assert(predicates::path::is_file()); activate_fish.assert(predicates::str::contains(r#"set -gx VIRTUAL_ENV ''"$(dirname -- "$(cd "$(dirname -- "$(status -f)")"; and pwd)")"''"#)); + + let activate_nu = scripts.child("activate.nu"); + activate_nu.assert(predicates::path::is_file()); + activate_nu.assert(predicates::str::contains( + r#"let virtual_env = (path self | path dirname | path dirname)"#, + )); } /// Ensure that a nested virtual environment uses the same `home` directory as the parent. From 52fe0bbf3b3834efb4fce30efa9173dd639ebdcd Mon Sep 17 00:00:00 2001 From: chisato <67509746+yumeminami@users.noreply.github.com> Date: Tue, 9 Dec 2025 01:58:48 +0800 Subject: [PATCH 2/3] clippy --- crates/uv-virtualenv/src/virtualenv.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/uv-virtualenv/src/virtualenv.rs b/crates/uv-virtualenv/src/virtualenv.rs index fb023f55ff0f4..3f4dca4d43dc0 100644 --- a/crates/uv-virtualenv/src/virtualenv.rs +++ b/crates/uv-virtualenv/src/virtualenv.rs @@ -463,7 +463,7 @@ pub(crate) fn create( (true, "activate.fish") => { r#"'"$(dirname -- "$(cd "$(dirname -- "$(status -f)")"; and pwd)")"'"#.to_string() } - (true, "activate.nu") => r#"(path self | path dirname | path dirname)"#.to_string(), + (true, "activate.nu") => r"(path self | path dirname | path dirname)".to_string(), (false, "activate.nu") => { format!( "'{}'", From 1df1e97747726fe4f16558d2fd2d96bf01ffbcb7 Mon Sep 17 00:00:00 2001 From: chisato <67509746+yumeminami@users.noreply.github.com> Date: Tue, 9 Dec 2025 02:03:50 +0800 Subject: [PATCH 3/3] clippy test file --- crates/uv/tests/it/venv.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/uv/tests/it/venv.rs b/crates/uv/tests/it/venv.rs index 98879fc6ab1e4..c2b9761aa69ab 100644 --- a/crates/uv/tests/it/venv.rs +++ b/crates/uv/tests/it/venv.rs @@ -1300,7 +1300,7 @@ fn verify_pyvenv_cfg_relocatable() { let activate_nu = scripts.child("activate.nu"); activate_nu.assert(predicates::path::is_file()); activate_nu.assert(predicates::str::contains( - r#"let virtual_env = (path self | path dirname | path dirname)"#, + r"let virtual_env = (path self | path dirname | path dirname)", )); }