diff --git a/cli/lib/cli/engine.ex b/cli/lib/cli/engine.ex index d63783f..a459f90 100644 --- a/cli/lib/cli/engine.ex +++ b/cli/lib/cli/engine.ex @@ -100,7 +100,8 @@ defmodule Cli.Engine do |> Map.keys() |> Enum.filter(fn name -> name == "CALLER_PWD" or String.ends_with?(name, "_CALLER_PWD") or - String.starts_with?(name, "MISE_") or String.starts_with?(name, "usage_") + (String.starts_with?(name, "MISE_") and name != "MISE_DATA_DIR") or + String.starts_with?(name, "usage_") end) |> Enum.map(&{String.to_charlist(&1), false}) end diff --git a/cli/test/engine_test.exs b/cli/test/engine_test.exs index 1b8aec3..89213ca 100644 --- a/cli/test/engine_test.exs +++ b/cli/test/engine_test.exs @@ -136,6 +136,7 @@ defmodule Cli.EngineTest do printf 'EXECUTABLE=%s\\n' "$0" printf 'CWD=%s\\n' "$(pwd -P)" printf 'PATH=%s\\n' "$PATH" + printf 'MISE_DATA_DIR=%s\\n' "${MISE_DATA_DIR-}" printf 'MISE_CONFIG_ROOT=%s\\n' "${MISE_CONFIG_ROOT-}" printf 'MISE_TASK_NAME=%s\\n' "${MISE_TASK_NAME-}" printf 'usage_message=%s\\n' "${usage_message-}" @@ -184,6 +185,7 @@ defmodule Cli.EngineTest do assert child =~ "EXECUTABLE=#{executable}" assert child =~ "CWD=#{String.trim(physical_cwd)}" assert child =~ "PATH=#{shim_bin}:#{ordinary_bin}" + assert child =~ "MISE_DATA_DIR=#{mise_data}" assert child =~ "MISE_CONFIG_ROOT=\n" assert child =~ "MISE_TASK_NAME=\n" assert child =~ "usage_message=\n" diff --git a/lib/harness-env.sh b/lib/harness-env.sh index 85320e9..852e567 100644 --- a/lib/harness-env.sh +++ b/lib/harness-env.sh @@ -15,6 +15,9 @@ sessions_scrub_task_env() { local name while IFS= read -r name; do case "$name" in + # MISE_DATA_DIR is user-owned tool storage. Retained shims need it to + # resolve target-project tools from a non-default mise installation. + MISE_DATA_DIR) ;; MISE_*|usage_*) unset "$name" ;; esac done < <(compgen -e) diff --git a/test/helpers.bash b/test/helpers.bash index 1f08b7e..98b4943 100644 --- a/test/helpers.bash +++ b/test/helpers.bash @@ -72,6 +72,7 @@ stub_pi_capture_env() { printf 'CALLER_PWD=%s\n' "\${CALLER_PWD-}" > "$env_capture" printf 'SESSIONS_CALLER_PWD=%s\n' "\${SESSIONS_CALLER_PWD-}" >> "$env_capture" printf 'OTHER_CALLER_PWD=%s\n' "\${OTHER_CALLER_PWD-}" >> "$env_capture" +printf 'MISE_DATA_DIR=%s\n' "\${MISE_DATA_DIR-}" >> "$env_capture" printf 'MISE_CONFIG_ROOT=%s\n' "\${MISE_CONFIG_ROOT-}" >> "$env_capture" # codebase:ignore - fixture proves inherited MCR is scrubbed printf 'MISE_TASK_NAME=%s\n' "\${MISE_TASK_NAME-}" >> "$env_capture" printf 'usage_message=%s\n' "\${usage_message-}" >> "$env_capture" diff --git a/test/run.bats b/test/run.bats index 8e152bc..647dfca 100644 --- a/test/run.bats +++ b/test/run.bats @@ -676,6 +676,7 @@ STUB export CALLER_PWD="/stale/caller" export SESSIONS_CALLER_PWD="/stale/sessions" export OTHER_CALLER_PWD="/stale/other" + export MISE_DATA_DIR="$mise_data" export usage_stale_probe="stale task value" PATH="$stale_bin:$pi_bin:$shim_bin:$fresh_bin:$PATH" run sessions run \ @@ -688,6 +689,7 @@ STUB grep -q '^CALLER_PWD=$' "$env_capture" grep -q '^SESSIONS_CALLER_PWD=$' "$env_capture" grep -q '^OTHER_CALLER_PWD=$' "$env_capture" + grep -q "^MISE_DATA_DIR=$mise_data$" "$env_capture" grep -q '^MISE_CONFIG_ROOT=$' "$env_capture" grep -q '^MISE_TASK_NAME=$' "$env_capture" grep -q '^usage_message=$' "$env_capture"