aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/core/conda.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/lib/core/conda.c b/src/lib/core/conda.c
index 0e0161d..48ed6c4 100644
--- a/src/lib/core/conda.c
+++ b/src/lib/core/conda.c
@@ -266,24 +266,28 @@ int conda_activate(const char *root, const char *env_name) {
return -1;
}
+ // Fully activate conda and record its effect on the runtime environment
+ char command[PATH_MAX * 3];
+ const char *conda_shlvl_str = getenv("CONDA_SHLVL");
+ unsigned long conda_shlvl = 0;
+ if (conda_shlvl_str) {
+ conda_shlvl = strtol(conda_shlvl_str, NULL, 10);
+ }
+
if (conda_prepend_bin(root)) {
remove(logfile);
return -1;
}
- // Fully activate conda and record its effect on the runtime environment
- char command[PATH_MAX * 3];
- const char *conda_shlvl = getenv("CONDA_SHLVL");
- if (conda_shlvl == NULL || strcmp(conda_shlvl, "0") == 0) {
- // First-run initialization
- snprintf(command, sizeof(command) - 1, "source %s; source %s; conda activate %s &>/dev/null; env -0", path_conda, path_mamba, env_name);
- } else {
- // Conda is already available and configured.
- // Make calls directly to conda using conda's base interpreter.
- // The shell functions generated by sourcing path_conda and path_mamba are extremely inconsistent
- // in this environment. DO NOT USE THEM.
- snprintf(command, sizeof(command) - 1, "$CONDA_PYTHON_EXE $CONDA_EXE activate %s &>/dev/null; env -0", env_name);
- }
+ snprintf(command, sizeof(command) - 1,
+ "set -a\n"
+ "source %s\n"
+ "function __conda_exe (\n\t\"$CONDA_PYTHON_EXE\" \"$CONDA_EXE\" $_CE_M $_CE_CONDA \"$@\"\n)\n"
+ "source %s\n"
+ "%s\n"
+ "conda activate %s 1>&2\n"
+ "env -0\n", path_conda, path_mamba, conda_shlvl ? "conda deactivate" : ":", env_name);
+
int retval = shell(&proc, command);
if (retval) {
// it didn't work; drop out for cleanup