Supports switching default board

This commit is contained in:
Eric Ratliff
2026-02-19 10:23:16 -06:00
parent b909da298e
commit 6cacc07109
9 changed files with 456 additions and 16 deletions

View File

@@ -80,6 +80,15 @@ pub fn list_boards(project_dir: Option<&str>) -> Result<()> {
"anvil board --add mega".bright_cyan()
);
if config.boards.len() > 1 {
println!(
" Set default: {}",
format!(
"anvil board --default {}",
config.boards.keys()
.find(|k| *k != &config.build.default)
.unwrap_or(&config.build.default)
).bright_cyan()
);
println!(
" Remove a board: {}",
format!(
@@ -446,7 +455,7 @@ pub fn remove_board(name: &str, project_dir: Option<&str>) -> Result<()> {
if name == config.build.default {
bail!(
"Cannot remove '{}' because it is the default board.\n \
Change the default in .anvil.toml first, or remove a different board.",
Change the default first: anvil board --default <other-board>",
name
);
}
@@ -495,6 +504,53 @@ pub fn remove_board(name: &str, project_dir: Option<&str>) -> Result<()> {
Ok(())
}
/// Set the default board in .anvil.toml.
pub fn set_default_board(name: &str, project_dir: Option<&str>) -> Result<()> {
let project_path = resolve_project_dir(project_dir)?;
let config = ProjectConfig::load(&project_path)?;
// Verify the board exists
if !config.boards.contains_key(name) {
let available: Vec<&String> = config.boards.keys().collect();
if available.is_empty() {
bail!(
"No board '{}' found.\n \
Add it first: anvil board --add {}",
name, name
);
} else {
bail!(
"No board '{}' found.\n \
Available: {}\n \
Add it first: anvil board --add {}",
name,
available.iter().map(|s| s.as_str()).collect::<Vec<_>>().join(", "),
name
);
}
}
let config_path = project_path.join(CONFIG_FILENAME);
let old = crate::project::config::set_default_in_file(&config_path, name)?;
let label = board_label(&config.boards[name].fqbn);
println!(
"{} Default board: {} ({})",
"ok".green(),
name.bright_white().bold(),
label.bright_cyan()
);
if !old.is_empty() && old != name {
println!(
" {}",
format!("Changed from: {}", old).bright_black()
);
}
println!();
Ok(())
}
fn resolve_project_dir(project_dir: Option<&str>) -> Result<std::path::PathBuf> {
let start = match project_dir {
Some(dir) => std::path::PathBuf::from(dir),