From 60255e615bfeae8816a7afe8bb1b4f3ff7a0c182 Mon Sep 17 00:00:00 2001 From: Wolf Vollprecht Date: Mon, 2 Jun 2025 18:01:26 +0200 Subject: [PATCH 1/2] make `prepend` the default activation path behavior --- crates/rattler_shell/src/activation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rattler_shell/src/activation.rs b/crates/rattler_shell/src/activation.rs index 39e96b493d..460b1681f6 100644 --- a/crates/rattler_shell/src/activation.rs +++ b/crates/rattler_shell/src/activation.rs @@ -28,11 +28,11 @@ const ENV_START_SEPARATOR: &str = "____RATTLER_ENV_START____"; #[derive(Default, Clone)] pub enum PathModificationBehavior { /// Replaces the complete path variable with specified paths. - #[default] Replace, /// Appends the new path variables to the path. E.g. Append, /// Prepends the new path variables to the path. E.g. "/new/path:$PATH" + #[default] Prepend, } From 13c90ad83f6f7f4fa920d011925e823f8abbabd8 Mon Sep 17 00:00:00 2001 From: Wolf Vollprecht Date: Mon, 2 Jun 2025 18:05:03 +0200 Subject: [PATCH 2/2] use prepend --- crates/rattler_menuinst/src/linux.rs | 8 ++++++-- crates/rattler_menuinst/src/macos.rs | 8 ++++++-- crates/rattler_menuinst/src/windows.rs | 8 ++++++-- crates/rattler_shell/src/activation.rs | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/crates/rattler_menuinst/src/linux.rs b/crates/rattler_menuinst/src/linux.rs index 3b81c0e487..24f7d619e4 100644 --- a/crates/rattler_menuinst/src/linux.rs +++ b/crates/rattler_menuinst/src/linux.rs @@ -11,7 +11,7 @@ use tempfile::TempDir; mod mime_config; use rattler_conda_types::Platform; -use rattler_shell::activation::{ActivationVariables, Activator}; +use rattler_shell::activation::{ActivationVariables, Activator, PathModificationBehavior}; use rattler_shell::shell; use crate::render::{BaseMenuItemPlaceholders, MenuItemPlaceholders, PlaceholderString}; @@ -300,7 +300,11 @@ impl LinuxMenu { if self.command.activate.unwrap_or(false) { // create a bash activation script and emit it into the script let activator = Activator::from_path(&self.prefix, shell::Bash, Platform::current())?; - let activation_env = activator.run_activation(ActivationVariables::default(), None)?; + let activation_variables = ActivationVariables { + path_modification_behavior: PathModificationBehavior::Prepend, + ..Default::default() + }; + let activation_env = activator.run_activation(activation_variables, None)?; for (k, v) in activation_env { envs.push(format!(r#"{k}="{v}""#)); diff --git a/crates/rattler_menuinst/src/macos.rs b/crates/rattler_menuinst/src/macos.rs index c2532ee9b3..efee24c688 100644 --- a/crates/rattler_menuinst/src/macos.rs +++ b/crates/rattler_menuinst/src/macos.rs @@ -10,7 +10,7 @@ use fs_err::File; use plist::Value; use rattler_conda_types::{menuinst::MacOsTracker, Platform}; use rattler_shell::{ - activation::{ActivationError, ActivationVariables, Activator}, + activation::{ActivationError, ActivationVariables, Activator, PathModificationBehavior}, shell, }; use sha2::{Digest as _, Sha256}; @@ -656,7 +656,11 @@ impl MacOSMenu { if self.command.activate.unwrap_or(false) { // create a bash activation script and emit it into the script let activator = Activator::from_path(&self.prefix, shell::Bash, Platform::current())?; - let activation_env = activator.run_activation(ActivationVariables::default(), None)?; + let activation_variables = ActivationVariables { + path_modification_behavior: PathModificationBehavior::Prepend, + ..Default::default() + }; + let activation_env = activator.run_activation(activation_variables, None)?; for (k, v) in activation_env { lines.push(format!(r#"export {k}="{v}""#)); diff --git a/crates/rattler_menuinst/src/windows.rs b/crates/rattler_menuinst/src/windows.rs index 65ab0616e8..7fa460330f 100644 --- a/crates/rattler_menuinst/src/windows.rs +++ b/crates/rattler_menuinst/src/windows.rs @@ -5,7 +5,7 @@ use rattler_conda_types::{ Platform, }; use rattler_shell::{ - activation::{ActivationVariables, Activator}, + activation::{ActivationVariables, Activator, PathModificationBehavior}, shell, }; use registry::{notify_shell_changes, FileExtension, UrlProtocol}; @@ -162,7 +162,11 @@ impl WindowsMenu { // create a bash activation script and emit it into the script let activator = Activator::from_path(&self.prefix, shell::CmdExe, Platform::current()).unwrap(); - let activation_env = activator.run_activation(ActivationVariables::default(), None)?; + let activation_variables = ActivationVariables { + path_modification_behavior: PathModificationBehavior::Prepend, + ..Default::default() + }; + let activation_env = activator.run_activation(activation_variables, None)?; for (k, v) in activation_env { lines.push(format!(r#"set "{k}={v}""#)); diff --git a/crates/rattler_shell/src/activation.rs b/crates/rattler_shell/src/activation.rs index 460b1681f6..39e96b493d 100644 --- a/crates/rattler_shell/src/activation.rs +++ b/crates/rattler_shell/src/activation.rs @@ -28,11 +28,11 @@ const ENV_START_SEPARATOR: &str = "____RATTLER_ENV_START____"; #[derive(Default, Clone)] pub enum PathModificationBehavior { /// Replaces the complete path variable with specified paths. + #[default] Replace, /// Appends the new path variables to the path. E.g. Append, /// Prepends the new path variables to the path. E.g. "/new/path:$PATH" - #[default] Prepend, }