From aeaea11e0f47eb2176c9c392a369fa4b3f23b7f2 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Thu, 14 Nov 2024 10:09:32 -0600 Subject: [PATCH] fix: incorrectly displaying "cargo-" as tool versions instead of "cargo:" Fixes #3025 --- e2e/cli/test_ls | 5 +++++ src/backend/mod.rs | 2 +- src/toolset/install_state.rs | 40 +++++++++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 e2e/cli/test_ls diff --git a/e2e/cli/test_ls b/e2e/cli/test_ls new file mode 100644 index 0000000000..bd0dc27531 --- /dev/null +++ b/e2e/cli/test_ls @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +mise i cargo:usage-cli +assert_contains "mise ls" "cargo:usage-cli" +assert_not_contains "mise ls" "cargo-usage-cli" # if the backend meta file isn't working right these will be displayed diff --git a/src/backend/mod.rs b/src/backend/mod.rs index edd14fdc11..d33366a1e8 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -598,7 +598,7 @@ pub trait Backend: Debug + Send + Sync { fn write_backend_meta(&self) -> eyre::Result<()> { file::write( self.ba().installs_path.join(".mise.backend"), - self.ba().full(), + format!("{}\n{}", self.ba().short, self.ba().full()), ) } } diff --git a/src/toolset/install_state.rs b/src/toolset/install_state.rs index 5fcce0ddee..2412fff039 100644 --- a/src/toolset/install_state.rs +++ b/src/toolset/install_state.rs @@ -17,6 +17,7 @@ type InstallStateTools = BTreeMap; #[derive(Debug, Clone)] pub struct InstallStateTool { pub short: String, + pub _dir: PathBuf, pub full: String, pub backend_type: BackendType, pub versions: Vec, @@ -67,6 +68,7 @@ fn init_tools() -> Result BackendType::Asdf, PluginType::Vfox => BackendType::Vfox, @@ -83,9 +85,16 @@ fn init_tools() -> Result Result Result Result> { +pub fn short_to_full(short: &str, meta_full: Option) -> Result> { let plugins = init_plugins()?; let plugins = plugins.as_ref().unwrap(); if let Some(plugin) = plugins.get(short) { @@ -127,7 +137,7 @@ pub fn short_to_full(short: &str) -> Result> { PluginType::Asdf => Ok(Some(format!("asdf:{short}"))), PluginType::Vfox => Ok(Some(format!("vfox:{short}"))), } - } else if let Some(full) = read_backend_meta(short) { + } else if let Some(full) = meta_full { Ok(Some(full)) } else if let Some(full) = REGISTRY .get(short) @@ -183,12 +193,17 @@ fn backend_meta_path(short: &str) -> PathBuf { dirs::INSTALLS.join(short).join(".mise.backend") } -fn migrate_backend_meta_json(short: &str) { - let old = dirs::INSTALLS.join(short).join(".mise.backend.json"); +fn migrate_backend_meta_json(dir: &str) { + let old = dirs::INSTALLS.join(dir).join(".mise.backend.json"); let migrate = || { let json: serde_json::Value = serde_json::from_reader(file::open(&old)?)?; if let Some(full) = json.get("id").and_then(|id| id.as_str()) { - file::write(backend_meta_path(short), full.trim())?; + let short = json + .get("short") + .and_then(|short| short.as_str()) + .unwrap_or(dir); + let doc = format!("{}\n{}", short, full); + file::write(backend_meta_path(dir), doc.trim())?; } Ok(()) }; @@ -202,7 +217,7 @@ fn migrate_backend_meta_json(short: &str) { } } -fn read_backend_meta(short: &str) -> Option { +fn read_backend_meta(short: &str) -> Option> { migrate_backend_meta_json(short); let path = backend_meta_path(short); if path.exists() { @@ -211,7 +226,12 @@ fn read_backend_meta(short: &str) -> Option { warn!("{err:?}"); }) .unwrap_or_default(); - Some(body) + Some( + body.lines() + .filter(|f| !f.is_empty()) + .map(|f| f.to_string()) + .collect(), + ) } else { None }