mirror of
https://github.com/esp-rs/espup.git
synced 2025-09-29 22:01:07 +00:00
add: CLI option to specify config path
This commit is contained in:
parent
93a988db46
commit
12d977e573
@ -41,8 +41,8 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Load the config from config file
|
/// Load the config from config file
|
||||||
pub fn load() -> Result<Self, Error> {
|
pub fn load(config_path: &Option<PathBuf>) -> Result<Self, Error> {
|
||||||
let file = Self::get_config_path()?;
|
let file = config_path.clone().unwrap_or(Self::get_config_path()?);
|
||||||
let config = if let Ok(data) = read(&file) {
|
let config = if let Ok(data) = read(&file) {
|
||||||
toml::from_slice(&data).map_err(|_| Error::FailedToDeserialize)?
|
toml::from_slice(&data).map_err(|_| Error::FailedToDeserialize)?
|
||||||
} else {
|
} else {
|
||||||
@ -52,8 +52,8 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Save the config to file
|
/// Save the config to file
|
||||||
pub fn save(&self) -> Result<(), Error> {
|
pub fn save(&self, config_path: &Option<PathBuf>) -> Result<(), Error> {
|
||||||
let file = Self::get_config_path()?;
|
let file = config_path.clone().unwrap_or(Self::get_config_path()?);
|
||||||
let serialized = toml::to_string(&self.clone()).map_err(|_| Error::FailedToSerialize)?;
|
let serialized = toml::to_string(&self.clone()).map_err(|_| Error::FailedToSerialize)?;
|
||||||
create_dir_all(file.parent().unwrap()).map_err(|_| Error::FailedToCreateConfigFile)?;
|
create_dir_all(file.parent().unwrap()).map_err(|_| Error::FailedToCreateConfigFile)?;
|
||||||
write(&file, serialized).map_err(|_| Error::FailedToWrite(file.display().to_string()))?;
|
write(&file, serialized).map_err(|_| Error::FailedToWrite(file.display().to_string()))?;
|
||||||
@ -61,9 +61,9 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Delete the config file
|
/// Delete the config file
|
||||||
pub fn delete() -> Result<(), Error> {
|
pub fn delete(config_path: &Option<PathBuf>) -> Result<(), Error> {
|
||||||
info!("{} Deleting config file", emoji::WRENCH);
|
info!("{} Deleting config file", emoji::WRENCH);
|
||||||
let file = Self::get_config_path()?;
|
let file = config_path.clone().unwrap_or(Self::get_config_path()?);
|
||||||
remove_file(&file).map_err(|_| Error::FailedToRemoveFile(file.display().to_string()))?;
|
remove_file(&file).map_err(|_| Error::FailedToRemoveFile(file.display().to_string()))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
33
src/main.rs
33
src/main.rs
@ -80,6 +80,9 @@ pub struct InstallOpts {
|
|||||||
/// Relative or full path for the export file that will be generated. If no path is provided, the file will be generated under home directory (https://docs.rs/dirs/latest/dirs/fn.home_dir.html).
|
/// Relative or full path for the export file that will be generated. If no path is provided, the file will be generated under home directory (https://docs.rs/dirs/latest/dirs/fn.home_dir.html).
|
||||||
#[arg(short = 'f', long)]
|
#[arg(short = 'f', long)]
|
||||||
pub export_file: Option<PathBuf>,
|
pub export_file: Option<PathBuf>,
|
||||||
|
/// The path to which the espup configuration file will be written to.
|
||||||
|
#[arg(short = 'p', long)]
|
||||||
|
pub config_path: 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: Option<HashSet<Crate>>,
|
||||||
@ -117,6 +120,9 @@ pub struct UpdateOpts {
|
|||||||
/// Xtensa Rust toolchain version.
|
/// Xtensa Rust toolchain version.
|
||||||
#[arg(short = 'v', long, value_parser = XtensaRust::parse_version)]
|
#[arg(short = 'v', long, value_parser = XtensaRust::parse_version)]
|
||||||
pub toolchain_version: Option<String>,
|
pub toolchain_version: Option<String>,
|
||||||
|
/// The path at which the espup configuration file can be found.
|
||||||
|
#[arg(short = 'p', long)]
|
||||||
|
pub config_path: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
@ -124,6 +130,9 @@ pub struct UninstallOpts {
|
|||||||
/// Verbosity level of the logs.
|
/// Verbosity level of the logs.
|
||||||
#[arg(short = 'l', long, default_value = "info", value_parser = ["debug", "info", "warn", "error"])]
|
#[arg(short = 'l', long, default_value = "info", value_parser = ["debug", "info", "warn", "error"])]
|
||||||
pub log_level: String,
|
pub log_level: String,
|
||||||
|
/// The path at which the espup configuration file can be found.
|
||||||
|
#[arg(short = 'p', long)]
|
||||||
|
pub config_path: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Installs the Rust for ESP chips environment
|
/// Installs the Rust for ESP chips environment
|
||||||
@ -268,7 +277,7 @@ async fn install(args: InstallOpts) -> Result<()> {
|
|||||||
xtensa_rust,
|
xtensa_rust,
|
||||||
};
|
};
|
||||||
info!("{} Saving configuration file", emoji::WRENCH);
|
info!("{} Saving configuration file", emoji::WRENCH);
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
|
|
||||||
info!("{} Installation successfully completed!", emoji::CHECK);
|
info!("{} Installation successfully completed!", emoji::CHECK);
|
||||||
warn!(
|
warn!(
|
||||||
@ -284,7 +293,7 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
check_for_update(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
|
check_for_update(env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
|
||||||
|
|
||||||
info!("{} Uninstalling esp-rs", emoji::DISC);
|
info!("{} Uninstalling esp-rs", emoji::DISC);
|
||||||
let mut config = Config::load()?;
|
let mut config = Config::load(&args.config_path)?;
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"{} Arguments:
|
"{} Arguments:
|
||||||
@ -295,14 +304,14 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
|
|
||||||
if let Some(xtensa_rust) = config.xtensa_rust {
|
if let Some(xtensa_rust) = config.xtensa_rust {
|
||||||
config.xtensa_rust = None;
|
config.xtensa_rust = None;
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
xtensa_rust.uninstall()?;
|
xtensa_rust.uninstall()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(llvm_path) = config.llvm_path {
|
if let Some(llvm_path) = config.llvm_path {
|
||||||
let llvm_path = llvm_path.parent().unwrap();
|
let llvm_path = llvm_path.parent().unwrap();
|
||||||
config.llvm_path = None;
|
config.llvm_path = None;
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
Llvm::uninstall(llvm_path)?;
|
Llvm::uninstall(llvm_path)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +321,7 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
|
|
||||||
if let Some(esp_idf_version) = config.esp_idf_version {
|
if let Some(esp_idf_version) = config.esp_idf_version {
|
||||||
config.esp_idf_version = None;
|
config.esp_idf_version = None;
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
EspIdfRepo::uninstall(&esp_idf_version)?;
|
EspIdfRepo::uninstall(&esp_idf_version)?;
|
||||||
} else {
|
} else {
|
||||||
info!("{} Deleting GCC targets", emoji::WRENCH);
|
info!("{} Deleting GCC targets", emoji::WRENCH);
|
||||||
@ -321,13 +330,13 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
// ESP32S2 and ESP32S3 also install the RISC-V toolchain for their ULP coprocessor
|
// ESP32S2 and ESP32S3 also install the RISC-V toolchain for their ULP coprocessor
|
||||||
config.targets.remove(&Target::ESP32C3);
|
config.targets.remove(&Target::ESP32C3);
|
||||||
config.targets.remove(&Target::ESP32C2);
|
config.targets.remove(&Target::ESP32C2);
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
Gcc::uninstall_riscv()?;
|
Gcc::uninstall_riscv()?;
|
||||||
}
|
}
|
||||||
for target in &config.targets.clone() {
|
for target in &config.targets.clone() {
|
||||||
if target.xtensa() {
|
if target.xtensa() {
|
||||||
config.targets.remove(target);
|
config.targets.remove(target);
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
Gcc::uninstall(target)?;
|
Gcc::uninstall(target)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -339,7 +348,7 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
for extra_crate in &config.extra_crates.clone().unwrap() {
|
for extra_crate in &config.extra_crates.clone().unwrap() {
|
||||||
updated_extra_crates.remove(extra_crate);
|
updated_extra_crates.remove(extra_crate);
|
||||||
config.extra_crates = Some(updated_extra_crates.clone());
|
config.extra_crates = Some(updated_extra_crates.clone());
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
Crate::uninstall(extra_crate)?;
|
Crate::uninstall(extra_crate)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,13 +356,13 @@ async fn uninstall(args: UninstallOpts) -> Result<()> {
|
|||||||
if let Some(export_file) = config.export_file {
|
if let Some(export_file) = config.export_file {
|
||||||
info!("{} Deleting export file", emoji::WRENCH);
|
info!("{} Deleting export file", emoji::WRENCH);
|
||||||
config.export_file = None;
|
config.export_file = None;
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
remove_file(&export_file)
|
remove_file(&export_file)
|
||||||
.map_err(|_| Error::FailedToRemoveFile(export_file.display().to_string()))?;
|
.map_err(|_| Error::FailedToRemoveFile(export_file.display().to_string()))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_dist_folder()?;
|
clear_dist_folder()?;
|
||||||
Config::delete()?;
|
Config::delete(&args.config_path)?;
|
||||||
|
|
||||||
info!("{} Uninstallation successfully completed!", emoji::CHECK);
|
info!("{} Uninstallation successfully completed!", emoji::CHECK);
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -366,7 +375,7 @@ async fn update(args: UpdateOpts) -> Result<()> {
|
|||||||
|
|
||||||
info!("{} Updating ESP Rust environment", emoji::DISC);
|
info!("{} Updating ESP Rust environment", emoji::DISC);
|
||||||
let host_triple = get_host_triple(args.default_host)?;
|
let host_triple = get_host_triple(args.default_host)?;
|
||||||
let mut config = Config::load()?;
|
let mut config = Config::load(&args.config_path)?;
|
||||||
let xtensa_rust: XtensaRust = if let Some(toolchain_version) = args.toolchain_version {
|
let xtensa_rust: XtensaRust = if let Some(toolchain_version) = args.toolchain_version {
|
||||||
XtensaRust::new(&toolchain_version, &host_triple)
|
XtensaRust::new(&toolchain_version, &host_triple)
|
||||||
} else {
|
} else {
|
||||||
@ -399,7 +408,7 @@ async fn update(args: UpdateOpts) -> Result<()> {
|
|||||||
config.xtensa_rust = Some(xtensa_rust);
|
config.xtensa_rust = Some(xtensa_rust);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.save()?;
|
config.save(&args.config_path)?;
|
||||||
|
|
||||||
info!("{} Update successfully completed!", emoji::CHECK);
|
info!("{} Update successfully completed!", emoji::CHECK);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user