mirror of https://github.com/jdx/mise
fix: regression with env overriding (#4421)
This commit is contained in:
parent
234049939c
commit
f057457b81
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
echo 'env.AAA = "main"' >.mise.toml
|
||||||
|
echo 'env.AAA = "override-1"' >mise.override1.toml
|
||||||
|
echo 'env.AAA = "override-2"' >mise.override2.toml
|
||||||
|
|
||||||
|
assert "mise env --json | jq -r .AAA" "main"
|
||||||
|
MISE_ENV=override1 assert "mise env --json | jq -r .AAA" "override-1"
|
||||||
|
MISE_ENV=override1,override2 assert "mise env --json | jq -r .AAA" "override-2"
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
cat <<EOF >mise.toml
|
cat <<EOF >mise.toml
|
||||||
[env]
|
[env]
|
||||||
_.path = ["bin"]
|
_.path = ["bin", "bin2"]
|
||||||
[tools]
|
[tools]
|
||||||
dummy = "1.0.0"
|
dummy = "1.0.0"
|
||||||
jq = "1.7.1"
|
jq = "1.7.1"
|
||||||
|
@ -11,7 +11,7 @@ EOF
|
||||||
mkdir bin subdir subdir/bin
|
mkdir bin subdir subdir/bin
|
||||||
cat <<EOF >subdir/mise.toml
|
cat <<EOF >subdir/mise.toml
|
||||||
[env]
|
[env]
|
||||||
_.path = ["bin"]
|
_.path = ["bin", "bin2"]
|
||||||
[tools]
|
[tools]
|
||||||
dummy = "2.0.0"
|
dummy = "2.0.0"
|
||||||
pitchfork = "0.1.5"
|
pitchfork = "0.1.5"
|
||||||
|
@ -24,4 +24,4 @@ assert "mise bin-paths" "$MISE_DATA_DIR/installs/dummy/2.0.0/bin
|
||||||
$MISE_DATA_DIR/installs/pitchfork/0.1.5
|
$MISE_DATA_DIR/installs/pitchfork/0.1.5
|
||||||
$MISE_DATA_DIR/installs/jq/1.7.1"
|
$MISE_DATA_DIR/installs/jq/1.7.1"
|
||||||
|
|
||||||
assert "mise env | grep PATH" "export PATH='$HOME/workdir/subdir/bin:$HOME/workdir/bin:$MISE_DATA_DIR/installs/dummy/2.0.0/bin:$MISE_DATA_DIR/installs/pitchfork/0.1.5:$MISE_DATA_DIR/installs/jq/1.7.1:$PATH'"
|
assert "mise env | grep PATH" "export PATH='$HOME/workdir/subdir/bin:$HOME/workdir/subdir/bin2:$HOME/workdir/bin:$HOME/workdir/bin2:$MISE_DATA_DIR/installs/dummy/2.0.0/bin:$MISE_DATA_DIR/installs/pitchfork/0.1.5:$MISE_DATA_DIR/installs/jq/1.7.1:$PATH'"
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::path_env::PathEnv;
|
||||||
use crate::tera::{get_tera, tera_exec};
|
use crate::tera::{get_tera, tera_exec};
|
||||||
use eyre::{eyre, Context};
|
use eyre::{eyre, Context};
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
|
use itertools::Itertools;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::cmp::PartialEq;
|
use std::cmp::PartialEq;
|
||||||
use std::collections::{BTreeSet, HashMap};
|
use std::collections::{BTreeSet, HashMap};
|
||||||
|
@ -335,18 +336,24 @@ impl EnvResults {
|
||||||
}
|
}
|
||||||
// trace!("resolve: paths: {:#?}", &paths);
|
// trace!("resolve: paths: {:#?}", &paths);
|
||||||
// trace!("resolve: ctx.env: {:#?}", &ctx.get("env"));
|
// trace!("resolve: ctx.env: {:#?}", &ctx.get("env"));
|
||||||
for (p, source) in paths {
|
for (source, paths) in &paths.iter().chunk_by(|(_, source)| source) {
|
||||||
// trace!("resolve: entry: {:?}, source: {}", &entry, display_path(source));
|
|
||||||
let config_root = source
|
let config_root = source
|
||||||
.parent()
|
.parent()
|
||||||
.map(Path::to_path_buf)
|
.map(Path::to_path_buf)
|
||||||
.or_else(|| dirs::CWD.clone())
|
.or_else(|| dirs::CWD.clone())
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
env::split_paths(&p)
|
let paths = paths.map(|(p, _)| p).collect_vec();
|
||||||
|
let paths = paths
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.flat_map(|path| env::split_paths(path))
|
||||||
.map(|s| normalize_path(&config_root, s))
|
.map(|s| normalize_path(&config_root, s))
|
||||||
.for_each(|p| r.env_paths.push(p.clone()));
|
.collect::<Vec<_>>();
|
||||||
|
r.env_paths.extend(paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r.env_paths.reverse();
|
||||||
|
|
||||||
Ok(r)
|
Ok(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,11 +62,11 @@ mod tests {
|
||||||
results.env_paths.into_iter().map(|p| replace_path(&p.display().to_string())).collect::<Vec<_>>(),
|
results.env_paths.into_iter().map(|p| replace_path(&p.display().to_string())).collect::<Vec<_>>(),
|
||||||
@r#"
|
@r#"
|
||||||
[
|
[
|
||||||
|
"~/foo/1",
|
||||||
|
"~/cwd/rel2/2",
|
||||||
|
"~/cwd/rel/1",
|
||||||
"/path/1",
|
"/path/1",
|
||||||
"/path/2",
|
"/path/2",
|
||||||
"~/foo/1",
|
|
||||||
"~/cwd/rel/1",
|
|
||||||
"~/cwd/rel2/2",
|
|
||||||
]
|
]
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
|
|
|
@ -585,6 +585,7 @@ impl Config {
|
||||||
let entries = self
|
let entries = self
|
||||||
.config_files
|
.config_files
|
||||||
.iter()
|
.iter()
|
||||||
|
.rev()
|
||||||
.map(|(source, cf)| {
|
.map(|(source, cf)| {
|
||||||
cf.env_entries()
|
cf.env_entries()
|
||||||
.map(|ee| ee.into_iter().map(|e| (e, source.clone())))
|
.map(|ee| ee.into_iter().map(|e| (e, source.clone())))
|
||||||
|
|
Loading…
Reference in New Issue