From cf903a5b5650528dc192be7f790d65c0a5cf14ff Mon Sep 17 00:00:00 2001 From: Tim Martin Date: Thu, 27 Jun 2024 21:20:40 -0500 Subject: [PATCH] Don't resolve symlinks in `path add` --- crates/nu-std/std/mod.nu | 3 +-- crates/nu-std/tests/test_std.nu | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/crates/nu-std/std/mod.nu b/crates/nu-std/std/mod.nu index 15bad0e8e5..4d4f2bb0f1 100644 --- a/crates/nu-std/std/mod.nu +++ b/crates/nu-std/std/mod.nu @@ -66,7 +66,7 @@ export def --env "path add" [ "record" => { $p | get --ignore-errors $nu.os-info.name }, } - $p | path expand + $p | path expand --no-symlink } if null in $paths or ($paths | is-empty) { @@ -80,7 +80,6 @@ export def --env "path add" [ $env | get $path_name | split row (char esep) - | path expand | if $append { append $paths } else { prepend $paths } )} diff --git a/crates/nu-std/tests/test_std.nu b/crates/nu-std/tests/test_std.nu index 45633719a0..51a2e7c1d3 100644 --- a/crates/nu-std/tests/test_std.nu +++ b/crates/nu-std/tests/test_std.nu @@ -44,6 +44,32 @@ def path_add [] { } } +#[test] +def path_add_expand [] { + use std assert + + # random paths to avoid collision, especially if left dangling on failure + let real_dir = $nu.temp-path | path join $"real-dir-(random chars)" + let link_dir = $nu.temp-path | path join $"link-dir-(random chars)" + mkdir $real_dir + let path_name = if $nu.os-info.family == 'windows' { + mklink /D $link_dir $real_dir + "Path" + } else { + ln -s $real_dir $link_dir | ignore + "PATH" + } + + with-env {$path_name: []} { + def get_path [] { $env | get $path_name } + + std path add $link_dir + assert equal (get_path) ([$link_dir]) + } + + rm $real_dir $link_dir +} + #[test] def banner [] { std assert ((std banner | lines | length) == 15)