From 160bb0165c095e56cee1337da8467001995d14d5 Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Thu, 8 May 2025 09:46:11 +1000 Subject: [PATCH 1/3] Updates --- crates/pet-conda/src/environments.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/pet-conda/src/environments.rs b/crates/pet-conda/src/environments.rs index a378a739..387e9d97 100644 --- a/crates/pet-conda/src/environments.rs +++ b/crates/pet-conda/src/environments.rs @@ -136,6 +136,15 @@ pub fn get_conda_installation_used_to_create_conda_env(env_path: &Path) -> Optio if let Some(conda_dir) = get_conda_dir_from_cmd(line) { if is_conda_install(&conda_dir) { return Some(conda_dir); + } else { + // Possible this is a directory such as `C:\Users\donja\miniconda3\Scripts` + // We try to remove `Scripts` or `bin` from the path in the `get_conda_dir_from_cmd`. + // However if there are other directories such as `condabin` or others we are not aware of, lets try. + if let Some(conda_dir) = conda_dir.parent() { + if is_conda_install(&conda_dir) { + return Some(conda_dir.into()); + } + } } } } @@ -233,6 +242,7 @@ fn get_conda_dir_from_cmd(cmd_line: String) -> Option { if let Some(conda_dir) = cmd_line.file_name() { if conda_dir.to_string_lossy().to_lowercase() == "bin" || conda_dir.to_string_lossy().to_lowercase() == "scripts" + || conda_dir.to_string_lossy().to_lowercase() == "condabin" { if let Some(conda_dir) = cmd_line.parent() { // Ensure the casing of the paths are correct. @@ -285,7 +295,7 @@ fn is_conda_env_name_in_cmd(cmd_line: String, name: &str) -> bool { // # cmd: /Users/donjayamanne/miniconda3/bin/conda create -n conda1 // # cmd_line: "# cmd: /usr/bin/conda create -p ./prefix-envs/.conda1 python=3.12 -y" // Look for "-n " in the command line - cmd_line.contains(format!("-n {:?}", name).as_str()) + cmd_line.contains(format!("-n {}", name).as_str()) } pub fn get_activation_command( From 9c1e2e996a06e6264ec35bf53b821793404eaf2f Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Thu, 8 May 2025 09:48:47 +1000 Subject: [PATCH 2/3] Fixes --- crates/pet-conda/src/environments.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/pet-conda/src/environments.rs b/crates/pet-conda/src/environments.rs index 387e9d97..61e0a8ec 100644 --- a/crates/pet-conda/src/environments.rs +++ b/crates/pet-conda/src/environments.rs @@ -141,7 +141,7 @@ pub fn get_conda_installation_used_to_create_conda_env(env_path: &Path) -> Optio // We try to remove `Scripts` or `bin` from the path in the `get_conda_dir_from_cmd`. // However if there are other directories such as `condabin` or others we are not aware of, lets try. if let Some(conda_dir) = conda_dir.parent() { - if is_conda_install(&conda_dir) { + if is_conda_install(conda_dir) { return Some(conda_dir.into()); } } From 1edef7ce222a7826735990ab0f8cea1fb6c3ca82 Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Thu, 8 May 2025 10:01:56 +1000 Subject: [PATCH 3/3] Add tests --- crates/pet-conda/src/environments.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/pet-conda/src/environments.rs b/crates/pet-conda/src/environments.rs index 61e0a8ec..3d11cdda 100644 --- a/crates/pet-conda/src/environments.rs +++ b/crates/pet-conda/src/environments.rs @@ -296,6 +296,7 @@ fn is_conda_env_name_in_cmd(cmd_line: String, name: &str) -> bool { // # cmd_line: "# cmd: /usr/bin/conda create -p ./prefix-envs/.conda1 python=3.12 -y" // Look for "-n " in the command line cmd_line.contains(format!("-n {}", name).as_str()) + || cmd_line.contains(format!("--name {}", name).as_str()) } pub fn get_activation_command( @@ -359,4 +360,23 @@ mod tests { PathBuf::from("/Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3") ); } + + #[test] + #[cfg(unix)] + fn verify_conda_env_name() { + let mut line = "# cmd: /Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3/lib/python3.10/site-packages/conda/__main__.py create --yes --name .conda python=3.12"; + assert!(is_conda_env_name_in_cmd(line.to_string(), ".conda")); + + let mut line = "# cmd: /Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3/lib/python3.10/site-packages/conda/__main__.py create --yes -n .conda python=3.12"; + assert!(is_conda_env_name_in_cmd(line.to_string(), ".conda")); + + line = "# cmd: /Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3/lib/python3.10/site-packages/conda/__main__.py create --yes --name .conda python=3.12"; + assert!(!is_conda_env_name_in_cmd(line.to_string(), "base")); + + line = "# cmd: /Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3/lib/python3.10/site-packages/conda/__main__.py create --yes -p .conda python=3.12"; + assert!(!is_conda_env_name_in_cmd(line.to_string(), "base")); + + line = "# cmd: /Users/donjayamanne/.pyenv/versions/mambaforge-22.11.1-3/lib/python3.10/site-packages/conda/__main__.py create --yes -p .conda python=3.12"; + assert!(!is_conda_env_name_in_cmd(line.to_string(), ".conda")); + } }