Skip to content

Commit 9560df9

Browse files
authored
Fix(conda.nu): Update Mamba/Conda info parsing and fix syntax errors (#1104)
This PR updates the `modules/virtual_environments/nu_conda_2/conda.nu` script to address several issues encountered with newer versions of Mamba/Conda and Nushell. **Problem:** The existing script failed when used with recent Mamba versions (e.g., Mamba 2.x) due to changes in the JSON output format of `mamba info --json`. Specifically: * The key for environment directories is now `"envs directories"` instead of `"envs_dirs"`. * The key for the base environment path is now `"base environment"` instead of `"root_prefix"`. * The `mamba info --envs --json` command returns minimal information, requiring separate calls to `mamba info --json` to get necessary details like `envs_dirs` and `root_prefix`. Additionally, several Nushell syntax errors were present: * Incorrect syntax for assigning the result of a multi-branch `if/else` expression to a variable using `let`. * Incorrect usage of `run-external`, attempting to pass flags like `--json` directly instead of as separate string arguments. * The `--no-banner` flag is not supported by `mamba info`. These issues resulted in errors like `Cannot find column 'envs_dirs'`, `Could not find environment named '...'`, `keyword_missing_arg`, and `unknown_flag`. **Solution:** This PR implements the following fixes: 1. **Updated `load-conda-info-env`:** * Detects Mamba/Conda/Micromamba correctly. * For Mamba, makes separate calls to `mamba info --json` and `mamba info --envs --json`. * Explicitly extracts `envs_dirs` and `root_prefix` using the correct key names (`"envs directories"`, `"base environment"`) observed in Mamba 2.x output. * For Conda, assumes `conda info --json` provides all necessary keys (`envs_dirs`, `root_prefix`, `envs`). * Includes basic logic for Micromamba (parsing text output). * Constructs the `$env.CONDA_INFO` record reliably with the required keys. 2. **Corrected Nushell Syntax:** * Fixed the `let cmd_base = ...` assignment by wrapping the `if/else` expression in parentheses `()`. * Fixed all `run-external` calls to pass the command and arguments as separate strings (e.g., `run-external "mamba" "info" "--json"`). 3. **Removed Unsupported Flag:** Removed `--no-banner` from `mamba info` calls. 4. **Improved Error Handling:** Added checks in `activate` to ensure `$env.CONDA_INFO` was loaded successfully. Changed `error make` to `print --stderr` and `return null` in `check-if-env-exists` for potentially smoother failure modes. 5. **Minor Improvements:** Cleaned up PATH manipulation, improved the completer function, added comments. **Testing:** This version has been tested successfully with: * Mamba 2.1.0 * Nushell 0.103.0 * Activating environments by name (`activate myenv`) and by full path (`activate /path/to/myenv`). * Deactivating environments (`deactivate`). It should also work correctly with standard Conda installations. Micromamba support is based on the original script's logic and may require further testing. Fixes issues like those encountered during the debugging session leading to this PR.
1 parent 67e74c5 commit 9560df9

File tree

1 file changed

+223
-66
lines changed
  • modules/virtual_environments/nu_conda_2

1 file changed

+223
-66
lines changed

0 commit comments

Comments
 (0)