Simplify the handling of extra crates

This commit is contained in:
Jesse Braham 2023-01-25 11:23:36 -08:00 committed by Sergio Gasquez Arcos
parent 32d9a385ba
commit 11034c2619
2 changed files with 14 additions and 24 deletions

View File

@ -19,7 +19,7 @@ pub struct Config {
/// Destination of the generated export file. /// Destination of the generated export file.
pub export_file: Option<PathBuf>, pub export_file: Option<PathBuf>,
/// Extra crates to installed. /// Extra crates to installed.
pub extra_crates: Option<HashSet<String>>, pub extra_crates: HashSet<String>,
/// Host triple /// Host triple
pub host_triple: HostTriple, pub host_triple: HostTriple,
/// LLVM toolchain path. /// LLVM toolchain path.

View File

@ -86,7 +86,7 @@ pub struct InstallOpts {
pub export_file: Option<PathBuf>, pub export_file: Option<PathBuf>,
/// Comma or space list of extra crates to install. /// Comma or space list of extra crates to install.
#[arg(short = 'c', long, required = false, value_parser = Crate::parse_crates)] #[arg(short = 'c', long, required = false, value_parser = Crate::parse_crates)]
pub extra_crates: Option<HashSet<Crate>>, pub extra_crates: HashSet<Crate>,
/// LLVM version. /// LLVM version.
#[arg(short = 'x', long, default_value = "15", value_parser = ["15"])] #[arg(short = 'x', long, default_value = "15", value_parser = ["15"])]
pub llvm_version: String, pub llvm_version: String,
@ -211,13 +211,8 @@ async fn install(args: InstallOpts) -> Result<()> {
if let Some(esp_idf_version) = &args.esp_idf_version { if let Some(esp_idf_version) = &args.esp_idf_version {
let repo = EspIdfRepo::new(esp_idf_version, args.profile_minimal, &targets); let repo = EspIdfRepo::new(esp_idf_version, args.profile_minimal, &targets);
to_install.push(Box::new(repo)); to_install.push(Box::new(repo));
if let Some(ref mut extra_crates) = extra_crates {
extra_crates.insert(Crate::new("ldproxy")); extra_crates.insert(Crate::new("ldproxy"));
} else {
let mut crates = HashSet::new();
crates.insert(Crate::new("ldproxy"));
extra_crates = Some(crates);
};
} else { } else {
targets.iter().for_each(|target| { targets.iter().for_each(|target| {
if target.xtensa() { if target.xtensa() {
@ -233,11 +228,9 @@ async fn install(args: InstallOpts) -> Result<()> {
} }
} }
if let Some(ref extra_crates) = &extra_crates { for extra_crate in &extra_crates {
for extra_crate in extra_crates {
to_install.push(Box::new(extra_crate.to_owned())); to_install.push(Box::new(extra_crate.to_owned()));
} }
}
// With a list of applications to install, install them all in parallel. // With a list of applications to install, install them all in parallel.
let installable_items = to_install.len(); let installable_items = to_install.len();
@ -277,12 +270,10 @@ async fn install(args: InstallOpts) -> Result<()> {
let config = Config { let config = Config {
esp_idf_version: args.esp_idf_version, esp_idf_version: args.esp_idf_version,
export_file: Some(export_file.clone()), export_file: Some(export_file.clone()),
extra_crates: extra_crates.as_ref().map(|extra_crates| { extra_crates: extra_crates
extra_crates
.iter() .iter()
.map(|x| x.name.clone()) .map(|x| x.name.clone())
.collect::<HashSet<String>>() .collect::<HashSet<_>>(),
}),
host_triple, host_triple,
llvm_path, llvm_path,
nightly_version: args.nightly_version, nightly_version: args.nightly_version,
@ -362,13 +353,12 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
} }
} }
if config_file.config.extra_crates.is_some() { if !config_file.config.extra_crates.is_empty() {
info!("{} Uninstalling extra crates", emoji::WRENCH); info!("{} Uninstalling extra crates", emoji::WRENCH);
let mut updated_extra_crates: HashSet<String> = let mut updated_extra_crates = config_file.config.extra_crates.clone();
config_file.config.extra_crates.clone().unwrap(); for extra_crate in &config_file.config.extra_crates.clone() {
for extra_crate in &config_file.config.extra_crates.clone().unwrap() {
updated_extra_crates.remove(extra_crate); updated_extra_crates.remove(extra_crate);
config_file.config.extra_crates = Some(updated_extra_crates.clone()); config_file.config.extra_crates = updated_extra_crates.clone();
config_file.save()?; config_file.save()?;
Crate::uninstall(extra_crate)?; Crate::uninstall(extra_crate)?;
} }