diff --git a/crates/aiken/src/cmd/deps/clear_cache.rs b/crates/aiken/src/cmd/deps/clear_cache.rs new file mode 100644 index 00000000..a0c4d15c --- /dev/null +++ b/crates/aiken/src/cmd/deps/clear_cache.rs @@ -0,0 +1,38 @@ +use aiken_project::{paths, pretty}; +use miette::IntoDiagnostic; +use owo_colors::OwoColorize; +use std::fs; + +pub fn exec() -> miette::Result<()> { + let dir = paths::packages_cache(); + println!( + "{} {}", + pretty::pad_left("Clearing".to_string(), 13, " ") + .bold() + .purple(), + dir.display().bold(), + ); + let packages = fs::read_dir(&dir).into_diagnostic()?; + for package in packages { + let path = package.into_diagnostic()?.path(); + println!( + "{} {}", + pretty::pad_left("Removing".to_string(), 13, " ") + .bold() + .purple(), + path.file_name() + .unwrap_or_default() + .to_str() + .unwrap_or_default() + .bright_blue(), + ); + fs::remove_file(path).into_diagnostic()?; + } + println!( + "{}", + pretty::pad_left("Done".to_string(), 13, " ") + .bold() + .purple() + ); + Ok(()) +} diff --git a/crates/aiken/src/cmd/deps/mod.rs b/crates/aiken/src/cmd/deps/mod.rs new file mode 100644 index 00000000..cc35df18 --- /dev/null +++ b/crates/aiken/src/cmd/deps/mod.rs @@ -0,0 +1,17 @@ +pub mod clear_cache; + +use clap::Subcommand; + +/// Managing project dependencies +#[derive(Subcommand)] +#[clap(setting(clap::AppSettings::DeriveDisplayOrder))] +pub enum Cmd { + /// Clear the system-wide dependencies cache + ClearCache, +} + +pub fn exec(cmd: Cmd) -> miette::Result<()> { + match cmd { + Cmd::ClearCache => clear_cache::exec(), + } +} diff --git a/crates/aiken/src/cmd/mod.rs b/crates/aiken/src/cmd/mod.rs index b3b837cb..9bfd480b 100644 --- a/crates/aiken/src/cmd/mod.rs +++ b/crates/aiken/src/cmd/mod.rs @@ -1,5 +1,6 @@ pub mod build; pub mod check; +pub mod deps; pub mod docs; pub mod error; pub mod fmt; diff --git a/crates/aiken/src/main.rs b/crates/aiken/src/main.rs index 9413416f..ebb977eb 100644 --- a/crates/aiken/src/main.rs +++ b/crates/aiken/src/main.rs @@ -1,4 +1,4 @@ -use aiken::cmd::{build, check, docs, fmt, lsp, new, tx, uplc}; +use aiken::cmd::{build, check, deps, docs, fmt, lsp, new, tx, uplc}; use clap::Parser; /// Aiken: a smart-contract language and toolchain for Cardano @@ -13,14 +13,17 @@ pub enum Cmd { Check(check::Args), Docs(docs::Args), - #[clap(hide = true)] - Lsp(lsp::Args), + #[clap(subcommand)] + Deps(deps::Cmd), #[clap(subcommand)] Tx(tx::Cmd), #[clap(subcommand)] Uplc(uplc::Cmd), + + #[clap(hide = true)] + Lsp(lsp::Args), } impl Default for Cmd { @@ -36,6 +39,7 @@ fn main() -> miette::Result<()> { Cmd::Fmt(args) => fmt::exec(args), Cmd::Build(args) => build::exec(args), Cmd::Docs(args) => docs::exec(args), + Cmd::Deps(args) => deps::exec(args), Cmd::Check(args) => check::exec(args), Cmd::Lsp(args) => lsp::exec(args), Cmd::Tx(sub_cmd) => tx::exec(sub_cmd),