Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions e2e/cli/test_use_latest
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ assert "mise tool tiny --requested" "latest"

touch mise.lock
assert "mise use dummy@1 tiny@1"
assert "cat mise.lock" '[tools.dummy]
assert "cat mise.lock" '[[tools.dummy]]
version = "1.0.0"
backend = "asdf:dummy"

[tools.tiny]
[[tools.tiny]]
version = "1.0.0"
backend = "asdf:tiny"'
assert "mise tool dummy --requested" "1"
Expand All @@ -29,11 +29,11 @@ assert "mise tool dummy --active" "1.0.0"
assert "mise tool tiny --active" "1.0.0"

assert "mise use dummy@latest"
assert "cat mise.lock" '[tools.dummy]
assert "cat mise.lock" '[[tools.dummy]]
version = "2.0.0"
backend = "asdf:dummy"

[tools.tiny]
[[tools.tiny]]
version = "1.0.0"
backend = "asdf:tiny"'
assert "mise tool dummy --requested" "latest"
Expand Down
8 changes: 4 additions & 4 deletions e2e/lockfile/test_lockfile_use
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,26 @@ assert "mise config get -f mise.toml tools.tiny" "1"
assert "mise where tiny" "$MISE_DATA_DIR/installs/tiny/1.0.0"
assert "mise ls tiny --json --current | jq -r '.[0].requested_version'" "1"
assert "mise ls tiny --json --current | jq -r '.[0].version'" "1.0.0"
assert "cat mise.lock" '[tools.tiny]
assert "cat mise.lock" '[[tools.tiny]]
version = "1.0.0"
backend = "asdf:tiny"'

assert "mise use tiny@1"
assert "cat mise.lock" '[tools.tiny]
assert "cat mise.lock" '[[tools.tiny]]
version = "1.0.0"
backend = "asdf:tiny"'
assert "mise ls tiny --json --current | jq -r '.[0].requested_version'" "1"
assert "mise ls tiny --json --current | jq -r '.[0].version'" "1.0.0"

assert "mise up tiny"
assert "cat mise.lock" '[tools.tiny]
assert "cat mise.lock" '[[tools.tiny]]
version = "1.1.0"
backend = "asdf:tiny"'
assert "mise ls tiny --json --current | jq -r '.[0].requested_version'" "1"
assert "mise ls tiny --json --current | jq -r '.[0].version'" "1.1.0"

assert "mise up tiny --bump"
assert "cat mise.lock" '[tools.tiny]
assert "cat mise.lock" '[[tools.tiny]]
version = "3.1.0"
backend = "asdf:tiny"'
assert "mise ls tiny --json --current | jq -r '.[0].requested_version'" "3"
Expand Down
52 changes: 26 additions & 26 deletions mise.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 40 additions & 8 deletions src/cli/lock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::path::PathBuf;
use crate::config::Config;
use crate::file::display_path;
use crate::lockfile::Lockfile;
use crate::platform::Platform;
use crate::{cli::args::ToolArg, config::Settings};
use console::style;
use eyre::Result;
Expand Down Expand Up @@ -49,6 +50,21 @@ impl Lock {
let config = Config::get().await?;
settings.ensure_experimental("lock")?;

// Validate platforms if specified
if !self.platform.is_empty() {
let parsed_platforms = Platform::parse_multiple(&self.platform)?;
miseprintln!(
"{} Validated {} platform(s): {}",
style("→").green(),
parsed_platforms.len(),
parsed_platforms
.iter()
.map(|p| p.to_key())
.collect::<Vec<_>>()
.join(", ")
);
}

// For Phase 1, just implement lockfile discovery and platform analysis
self.analyze_lockfiles(&config).await?;

Expand Down Expand Up @@ -288,14 +304,30 @@ impl Lock {
// If no platforms specified, target all platforms
available_platforms.iter().cloned().collect()
} else {
// Filter to only specified platforms that exist in lockfile
let specified_platforms: BTreeSet<String> = self.platform.iter().cloned().collect();

available_platforms
.iter()
.filter(|platform| specified_platforms.contains(*platform))
.cloned()
.collect()
// Parse and validate specified platforms first, then filter
match Platform::parse_multiple(&self.platform) {
Ok(parsed_platforms) => {
let specified_platforms: BTreeSet<String> =
parsed_platforms.iter().map(|p| p.to_key()).collect();

available_platforms
.iter()
.filter(|platform| specified_platforms.contains(*platform))
.cloned()
.collect()
}
Err(_) => {
// If parsing fails, fall back to original logic
let specified_platforms: BTreeSet<String> =
self.platform.iter().cloned().collect();

available_platforms
.iter()
.filter(|platform| specified_platforms.contains(*platform))
.cloned()
.collect()
}
}
}
}
}
Expand Down
Loading