util: Fix shell environment fetching failing with nu (#40275)

Lukas Wirth created

Release Notes:

- Fixed shell environment fetching failing with nu shell

Change summary

crates/project/src/environment.rs | 2 +-
crates/util/src/shell.rs          | 1 +
crates/util/src/shell_env.rs      | 6 +++++-
3 files changed, 7 insertions(+), 2 deletions(-)

Detailed changes

crates/project/src/environment.rs 🔗

@@ -263,7 +263,7 @@ async fn load_shell_environment(
             .into_iter()
             .collect();
         (Some(fake_env), None)
-    } else if cfg!(target_os = "windows",) {
+    } else if cfg!(target_os = "windows") {
         let (shell, args) = shell.program_and_args();
         let envs = match shell_env::capture(shell, args, dir).await {
             Ok(envs) => envs,

crates/util/src/shell.rs 🔗

@@ -45,6 +45,7 @@ pub fn get_windows_git_bash() -> Option<String> {
         let git = which::which("git").ok()?;
         let git_bash = git.parent()?.parent()?.join("bin").join("bash.exe");
         if git_bash.is_file() {
+            log::info!("Found git-bash at {}", git_bash.display());
             Some(git_bash.to_string_lossy().to_string())
         } else {
             None

crates/util/src/shell_env.rs 🔗

@@ -177,8 +177,12 @@ async fn capture_windows(
                 .args([
                     "-c",
                     &format!(
-                        "cd '{}'; {} --printenv",
+                        "cd '{}'; {}{} --printenv",
                         directory.display(),
+                        shell_kind
+                            .command_prefix()
+                            .map(|prefix| prefix.to_string())
+                            .unwrap_or_default(),
                         zed_path.display()
                     ),
                 ])