diff --git a/crates/aiken/src/cmd/packages/add.rs b/crates/aiken/src/cmd/packages/add.rs index 964ab495..522f8cbe 100644 --- a/crates/aiken/src/cmd/packages/add.rs +++ b/crates/aiken/src/cmd/packages/add.rs @@ -17,10 +17,13 @@ pub struct Args { /// /// Note that by default, this assumes the package is located /// on Github. - package: String, + pub package: String, /// The package version, as a git commit hash, a tag or a branch name. #[clap(long)] - version: String, + pub version: String, + + #[clap(hide = true)] + pub overwrite: bool, } pub fn exec(args: Args) -> miette::Result<()> { @@ -42,20 +45,24 @@ pub fn exec(args: Args) -> miette::Result<()> { println!( "{} {}", - pretty::pad_left("Adding".to_string(), 13, " ") + pretty::pad_left("Package".to_string(), 13, " ") .bold() .purple(), dependency.name.bright_blue(), ); - match config.insert(&dependency, false) { + match config.insert(&dependency, args.overwrite) { Some(config) => { config.save(&root).into_diagnostic()?; println!( - "{} version = {}", - pretty::pad_left("Added".to_string(), 13, " ") - .bold() - .purple(), + "{} version → {}", + pretty::pad_left( + if args.overwrite { "Changed" } else { "Added" }.to_string(), + 13, + " " + ) + .bold() + .purple(), dependency.version.yellow() ); Ok(()) diff --git a/crates/aiken/src/cmd/packages/mod.rs b/crates/aiken/src/cmd/packages/mod.rs index 0421b0cb..7c72f793 100644 --- a/crates/aiken/src/cmd/packages/mod.rs +++ b/crates/aiken/src/cmd/packages/mod.rs @@ -1,5 +1,6 @@ pub mod add; pub mod clear_cache; +pub mod upgrade; use clap::Subcommand; @@ -10,6 +11,9 @@ pub enum Cmd { /// Add a new package dependency Add(add::Args), + /// Change the version of an installed dependency + Upgrade(upgrade::Args), + /// Clear the system-wide dependencies cache ClearCache, } @@ -18,5 +22,6 @@ pub fn exec(cmd: Cmd) -> miette::Result<()> { match cmd { Cmd::Add(args) => add::exec(args), Cmd::ClearCache => clear_cache::exec(), + Cmd::Upgrade(args) => upgrade::exec(args), } } diff --git a/crates/aiken/src/cmd/packages/upgrade.rs b/crates/aiken/src/cmd/packages/upgrade.rs new file mode 100644 index 00000000..4c681201 --- /dev/null +++ b/crates/aiken/src/cmd/packages/upgrade.rs @@ -0,0 +1,24 @@ +use super::add; + +#[derive(clap::Args)] +/// Change the version of an installed dependency +pub struct Args { + /// Package name, in the form of {owner}/{repository}. + /// + /// For example → 'add aiken-lang/stdlib' + /// + /// Note that by default, this assumes the package is located + /// on Github. + package: String, + /// The package version, as a git commit hash, a tag or a branch name. + #[clap(long)] + version: String, +} + +pub fn exec(args: Args) -> miette::Result<()> { + add::exec(add::Args { + package: args.package, + version: args.version, + overwrite: true, + }) +}