Supports switching default board
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user