mirror of
https://github.com/esp-rs/espup.git
synced 2025-10-02 07:10:36 +00:00
feat: ✨ Initial support for uninstall cmd
This commit is contained in:
parent
6413156846
commit
1213efb895
@ -168,7 +168,7 @@ impl EspIdfRepo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the esp-idf installation path.
|
/// Gets the esp-idf installation path.
|
||||||
fn get_install_path(repo: EspIdfRemote) -> PathBuf {
|
pub fn get_install_path(repo: EspIdfRemote) -> PathBuf {
|
||||||
let mut hasher = DefaultHasher::new();
|
let mut hasher = DefaultHasher::new();
|
||||||
repo.repo_url.as_ref().unwrap().hash(&mut hasher);
|
repo.repo_url.as_ref().unwrap().hash(&mut hasher);
|
||||||
let repo_url_hash = format!("{:x}", hasher.finish());
|
let repo_url_hash = format!("{:x}", hasher.finish());
|
||||||
|
59
src/main.rs
59
src/main.rs
@ -1,17 +1,19 @@
|
|||||||
use crate::chip::Chip;
|
use crate::chip::Chip;
|
||||||
use crate::espidf::{get_tools_path, EspIdfRepo};
|
use crate::espidf::{get_install_path, get_tool_path, get_tools_path, EspIdfRepo};
|
||||||
use crate::gcc_toolchain::install_gcc_targets;
|
use crate::gcc_toolchain::install_gcc_targets;
|
||||||
use crate::llvm_toolchain::LlvmToolchain;
|
use crate::llvm_toolchain::LlvmToolchain;
|
||||||
use crate::rust_toolchain::{
|
use crate::rust_toolchain::{
|
||||||
check_rust_installation, get_rust_crate, install_crate, RustCrate, RustToolchain,
|
check_rust_installation, get_rust_crate, get_rustup_home, install_crate, RustCrate,
|
||||||
|
RustToolchain,
|
||||||
};
|
};
|
||||||
use crate::utils::{
|
use crate::utils::{
|
||||||
clear_dist_folder, export_environment, logging::initialize_logger, parse_targets,
|
clear_dist_folder, export_environment, logging::initialize_logger, parse_targets,
|
||||||
};
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use embuild::espidf::{parse_esp_idf_git_ref, EspIdfRemote};
|
||||||
use log::{debug, info};
|
use log::{debug, info};
|
||||||
use std::path::PathBuf;
|
use std::{fs::remove_dir_all, path::PathBuf};
|
||||||
|
|
||||||
mod chip;
|
mod chip;
|
||||||
mod emoji;
|
mod emoji;
|
||||||
@ -83,9 +85,6 @@ pub struct InstallOpts {
|
|||||||
/// Comma or space separated list of targets [esp32,esp32s2,esp32s3,esp32c3,all].
|
/// Comma or space separated list of targets [esp32,esp32s2,esp32s3,esp32c3,all].
|
||||||
#[clap(short = 't', long, default_value = "all")]
|
#[clap(short = 't', long, default_value = "all")]
|
||||||
pub targets: String,
|
pub targets: String,
|
||||||
/// Xtensa Rust toolchain instalation folder.
|
|
||||||
#[clap(short = 'd', long, required = false)]
|
|
||||||
pub toolchain_destination: Option<PathBuf>,
|
|
||||||
/// Xtensa Rust toolchain version.
|
/// Xtensa Rust toolchain version.
|
||||||
#[clap(short = 'v', long, default_value = "1.62.1.0")]
|
#[clap(short = 'v', long, default_value = "1.62.1.0")]
|
||||||
pub toolchain_version: String,
|
pub toolchain_version: String,
|
||||||
@ -100,8 +99,24 @@ pub struct UpdateOpts {
|
|||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
pub struct UninstallOpts {
|
pub struct UninstallOpts {
|
||||||
|
/// ESP-IDF version to uninstall. If empty, no esp-idf is uninsalled. Version format:
|
||||||
|
///
|
||||||
|
/// - `commit:<hash>`: Uses the commit `<hash>` of the `esp-idf` repository.
|
||||||
|
///
|
||||||
|
/// - `tag:<tag>`: Uses the tag `<tag>` of the `esp-idf` repository.
|
||||||
|
///
|
||||||
|
/// - `branch:<branch>`: Uses the branch `<branch>` of the `esp-idf` repository.
|
||||||
|
///
|
||||||
|
/// - `v<major>.<minor>` or `<major>.<minor>`: Uses the tag `v<major>.<minor>` of the `esp-idf` repository.
|
||||||
|
///
|
||||||
|
/// - `<branch>`: Uses the branch `<branch>` of the `esp-idf` repository.
|
||||||
|
#[clap(short = 'e', long, required = false)]
|
||||||
|
pub espidf_version: Option<String>,
|
||||||
|
/// Verbosity level of the logs.
|
||||||
|
#[clap(short = 'l', long, default_value = "info", possible_values = &["debug", "info", "warn", "error"])]
|
||||||
|
pub log_level: String,
|
||||||
/// Removes clang.
|
/// Removes clang.
|
||||||
#[clap(short = 'r', long)]
|
#[clap(short = 'c', long, takes_value = false)]
|
||||||
pub remove_clang: bool,
|
pub remove_clang: bool,
|
||||||
// TODO: Other options to remove?
|
// TODO: Other options to remove?
|
||||||
}
|
}
|
||||||
@ -135,8 +150,7 @@ fn install(args: InstallOpts) -> Result<()> {
|
|||||||
- Nightly version: {:?}
|
- Nightly version: {:?}
|
||||||
- Rust Toolchain: {:?}
|
- Rust Toolchain: {:?}
|
||||||
- Profile Minimal: {:?}
|
- Profile Minimal: {:?}
|
||||||
- Toolchain version: {:?}
|
- Toolchain version: {:?}",
|
||||||
- Toolchain destination: {:?}",
|
|
||||||
emoji::INFO,
|
emoji::INFO,
|
||||||
arch,
|
arch,
|
||||||
targets,
|
targets,
|
||||||
@ -148,7 +162,6 @@ fn install(args: InstallOpts) -> Result<()> {
|
|||||||
rust_toolchain,
|
rust_toolchain,
|
||||||
args.profile_minimal,
|
args.profile_minimal,
|
||||||
args.toolchain_version,
|
args.toolchain_version,
|
||||||
&args.toolchain_destination,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
check_rust_installation(&args.nightly_version)?;
|
check_rust_installation(&args.nightly_version)?;
|
||||||
@ -198,9 +211,29 @@ fn update(_args: UpdateOpts) -> Result<()> {
|
|||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn uninstall(_args: UninstallOpts) -> Result<()> {
|
fn uninstall(args: UninstallOpts) -> Result<()> {
|
||||||
// TODO: Uninstall
|
initialize_logger(&args.log_level);
|
||||||
todo!();
|
|
||||||
|
info!("{} Uninstalling esp-rs", emoji::DISC);
|
||||||
|
info!("{} Deleting Xtensa Rust toolchain", emoji::WRENCH);
|
||||||
|
remove_dir_all(get_rustup_home().join("toolchains").join("esp"))?;
|
||||||
|
|
||||||
|
if args.remove_clang {
|
||||||
|
info!("{} Deleting Xtensa Clang", emoji::WRENCH);
|
||||||
|
remove_dir_all(PathBuf::from(get_tool_path("")).join("xtensa-esp32-elf-clang"))?;
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_dist_folder()?;
|
||||||
|
|
||||||
|
if args.espidf_version.is_some() {
|
||||||
|
info!("{} Deleting ESP-IDF", emoji::WRENCH);
|
||||||
|
let repo = EspIdfRemote {
|
||||||
|
git_ref: parse_esp_idf_git_ref(&args.espidf_version.unwrap()),
|
||||||
|
repo_url: Some("https://github.com/espressif/esp-idf".to_string()),
|
||||||
|
};
|
||||||
|
remove_dir_all(get_install_path(repo).parent().unwrap())?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reinstall(_args: InstallOpts) -> Result<()> {
|
fn reinstall(_args: InstallOpts) -> Result<()> {
|
||||||
|
@ -143,13 +143,9 @@ impl RustToolchain {
|
|||||||
let cargo_home = get_cargo_home();
|
let cargo_home = get_cargo_home();
|
||||||
let rustup_home = get_rustup_home();
|
let rustup_home = get_rustup_home();
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
let default_toolchain_destination = rustup_home.join("toolchains").join("esp");
|
let toolchain_destination = rustup_home.join("toolchains").join("esp");
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let default_toolchain_destination = rustup_home.join("toolchains");
|
let toolchain_destination = rustup_home.join("toolchains");
|
||||||
let toolchain_destination = args
|
|
||||||
.toolchain_destination
|
|
||||||
.clone()
|
|
||||||
.unwrap_or(default_toolchain_destination);
|
|
||||||
Self {
|
Self {
|
||||||
dist_file,
|
dist_file,
|
||||||
dist_url,
|
dist_url,
|
||||||
@ -197,7 +193,7 @@ fn get_cargo_home() -> PathBuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the default rustup home path.
|
/// Gets the default rustup home path.
|
||||||
fn get_rustup_home() -> PathBuf {
|
pub fn get_rustup_home() -> PathBuf {
|
||||||
PathBuf::from(env::var("RUSTUP_HOME").unwrap_or_else(|_e| get_home_dir() + "/.rustup"))
|
PathBuf::from(env::var("RUSTUP_HOME").unwrap_or_else(|_e| get_home_dir() + "/.rustup"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user