Skip to content

Commit cb69396

Browse files
committed
Fixed remaining issues
1 parent bdf9a48 commit cb69396

File tree

2 files changed

+55
-41
lines changed

2 files changed

+55
-41
lines changed

libmamba/src/core/activation.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,32 +1248,31 @@ namespace mamba
12481248

12491249
if (!env_transform.export_path.empty())
12501250
{
1251-
out << "PATH = " << env_transform.export_path << util:on_win ? ';' : ':';
1251+
out << "PATH = " << env_transform.export_path << (util::on_win ? ';' : ':') << "\n";
12521252
}
12531253

12541254
for (const fs::u8path& ds : env_transform.deactivate_scripts)
12551255
{
1256-
out << "source " << ds << ";";
1256+
out << "source " << ds << "\n";
12571257
}
12581258

12591259
for (const std::string& uvar : env_transform.unset_vars)
12601260
{
1261-
out << "hide-env " << uvar << ";";
1261+
out << "hide-env " << uvar << "\n";
12621262
}
12631263

12641264
for (const auto& [skey, svar] : env_transform.set_vars)
12651265
{
1266-
out << "let " << skey << " = " << svar << ";";
1266+
out << "let " << skey << " = " << svar << "\n";
12671267
}
12681268

12691269
for (const auto& [ekey, evar] : env_transform.export_vars)
12701270
{
1271-
// add unix or windows handling
1272-
out << ekey << " = " << evar << util:on_win ? ';' : ':';
1271+
out << ekey << " = " << evar << "\n";
12731272
}
12741273
for (const fs::u8path& p : env_transform.activate_scripts)
12751274
{
1276-
out << "source " << p << ";";
1275+
out << "source " << p << "\n";
12771276
}
12781277
return out.str();
12791278
}

libmamba/src/core/shell_init.cpp

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -489,48 +489,63 @@ namespace mamba
489489
// TODO the following shouldn't live here but in a shell hook
490490
content << R"nu(def --env ")nu" << exe_name << R"nu( activate" [name: string] {)nu";
491491
content << R"###(
492-
#add condabin when base env
493-
if $env.MAMBA_SHLVL? == null {
494-
$env.MAMBA_SHLVL = 0
495-
$env.PATH = ($env.PATH | prepend $"($env.MAMBA_ROOT_PREFIX)/condabin")
496-
}
497-
#ask mamba how to setup the environment and set the environment
498-
(^($env.MAMBA_EXE) shell activate --shell nu $name
499-
| str replace --regex '\s+' '' --all
500-
| split row (if $nu.os-info.name == "windows" { ";" } else { ":" })
501-
| parse --regex '(.*)=(.+)'
502-
| transpose --header-row
503-
| into record
504-
| load-env
505-
)
506-
$env.PATH = $env.PATH | split row (char esep)
507-
# update prompt
508-
if ($env.CONDA_PROMPT_MODIFIER? != null) {
509-
$env.PROMPT_COMMAND = {|| $env.CONDA_PROMPT_MODIFIER + (do $env.PROMPT_COMMAND_BK)}
510-
}
511-
})###" << "\n";
492+
493+
#add condabin when base env
494+
if $env.MAMBA_SHLVL? == null {
495+
$env.MAMBA_SHLVL = 0
496+
$env.PATH = ($env.PATH | prepend $"($env.MAMBA_ROOT_PREFIX)/condabin")
497+
}
498+
499+
try {
500+
let new_env = ^($env.MAMBA_EXE) shell activate --shell nu $name
501+
# Process and load environment only if mamba command succeeded
502+
$new_env
503+
| lines
504+
| str replace --regex '\s+' '' --all
505+
| parse --regex '([^=]+)=(.+)'
506+
| reduce -f {} { |it, acc|
507+
$acc | merge {
508+
$it.capture0: (
509+
if ($it.capture0 == "PATH") or ($it.capture0 | str ends-with "_PATH") {
510+
$it.capture1 | split row (if $nu.os-info.name == "Windows" { ";" } else { ":" }) | where { |path| $path != "" }
511+
} else {
512+
$it.capture1
513+
}
514+
)
515+
}
516+
} | load-env
517+
518+
# Set up prompt
519+
$env.CONDA_PROMPT_MODIFIER = "(" + $name + ")"
520+
if ($env.PROMPT_COMMAND_BK? == null) {
521+
$env.PROMPT_COMMAND_BK = $env.PROMPT_COMMAND
522+
}
523+
$env.PROMPT_COMMAND = {|| $env.CONDA_PROMPT_MODIFIER + " " + (do $env.PROMPT_COMMAND_BK)}
524+
525+
} catch { | err |
526+
echo $"Failed to activate ($name) environment: ($err.msg)"
527+
}
528+
})###" << "\n";
512529

513530
content << R"nu(def --env ")nu" << exe_name << R"nu( deactivate" [] {)nu";
514531
content << R"###(
515532
#remove active environment except base env
516-
if $env.CONDA_PROMPT_MODIFIER? != null {
517-
# unset set variables
518-
for x in (^$env.MAMBA_EXE shell deactivate --shell nu
519-
| split row (if $nu.os-info.name == "windows" { ";" } else { ":" }) {
520-
if ("hide-env" in $x) {
521-
hide-env ($x | parse "hide-env {var}").var.0
522-
} else if $x != "" {
523-
let keyValue = ($x
524-
| str replace --regex '\s+' "" --all
525-
| parse '{key}={value}'
526-
)
527-
load-env {$keyValue.0.key: $keyValue.0.value}
528-
}
533+
for x in (^$env.MAMBA_EXE shell deactivate --shell nu
534+
| split row (if $nu.os-info.name == "windows" { ";" } else { ":" })) {
535+
if ("hide-env" in $x) {
536+
hide-env ($x | parse "hide-env {var}").var.0
537+
} else if $x != "" {
538+
let keyValue = ($x
539+
| str replace --regex '\s+' "" --all
540+
| parse '{key}={value}'
541+
)
542+
load-env {$keyValue.0.key: $keyValue.0.value}
543+
}
529544
}
530545
# reset prompt
531546
$env.PROMPT_COMMAND = $env.PROMPT_COMMAND_BK
532547
}
533-
})###" << "\n";
548+
)###" << "\n";
534549
content << "# <<< mamba initialize <<<\n";
535550
return content.str();
536551
}

0 commit comments

Comments
 (0)