feat(cli): support multiple packages in package management commands

Allow users to:
- Add multiple packages at once: `ya pack -a A B C D`
- Delete multiple packages at once: `ya pack -d A B C D`

Fixes #2250
This commit is contained in:
evpeople 2025-01-29 14:20:15 +08:00
parent c061397a09
commit 7e427fed56
No known key found for this signature in database
GPG key ID: CF5768B6A73046FF
2 changed files with 15 additions and 9 deletions

View file

@ -54,12 +54,12 @@ pub(super) struct CommandEmitTo {
#[derive(clap::Args)]
#[command(arg_required_else_help = true)]
pub(super) struct CommandPack {
/// Add a package.
#[arg(short = 'a', long)]
pub(super) add: Option<String>,
/// Add packages.
#[arg(short = 'a', long, num_args = 1..)]
pub(super) add: Option<Vec<String>>,
/// Delete a package.
#[arg(short = 'd', long)]
pub(super) delete: Option<String>,
#[arg(short = 'd', long,num_args = 1..)]
pub(super) delete: Option<Vec<String>>,
/// Install all packages.
#[arg(short = 'i', long)]
pub(super) install: bool,

View file

@ -71,10 +71,16 @@ async fn run() -> anyhow::Result<()> {
package::Package::load().await?.print()?;
} else if cmd.upgrade {
package::Package::load().await?.install(true).await?;
} else if let Some(repo) = cmd.add {
package::Package::load().await?.add(&repo).await?;
} else if let Some(repo) = cmd.delete {
package::Package::load().await?.delete(&repo).await?;
} else if let Some(repos) = cmd.add {
let mut package = package::Package::load().await?;
for repo in repos {
package.add(&repo).await?;
}
} else if let Some(repos) = cmd.delete {
let mut package = package::Package::load().await?;
for repo in repos {
package.delete(&repo).await?;
}
}
}