From af89c726e759a72f38548cba636e2444f179b915 Mon Sep 17 00:00:00 2001 From: Breadway Date: Sun, 7 Jun 2026 14:51:20 +0800 Subject: [PATCH] feat: multi-package install and bakery update all - bakery install now accepts one or more package names - bakery update all treated as update-everything (same as bare update) - bump version to 0.2.0 --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- bakery/src/main.rs | 15 +++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78dd279..20dc16e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -81,7 +81,7 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bakery" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "chrono", @@ -118,7 +118,7 @@ dependencies = [ [[package]] name = "bread-theme" -version = "0.1.0" +version = "0.2.0" dependencies = [ "dirs", "gtk4", diff --git a/Cargo.toml b/Cargo.toml index 9511358..8a29f30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["bakery", "bread-theme"] resolver = "2" [workspace.package] -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "MIT" authors = ["Breadway "] diff --git a/bakery/src/main.rs b/bakery/src/main.rs index 1fec0bb..4a3456a 100644 --- a/bakery/src/main.rs +++ b/bakery/src/main.rs @@ -20,9 +20,10 @@ struct Cli { #[derive(Subcommand)] enum Cmd { - /// Install a package + /// Install one or more packages Install { - package: String, + #[arg(required = true, num_args = 1..)] + packages: Vec, }, /// Remove an installed package (data files are never deleted) Remove { @@ -61,7 +62,12 @@ fn main() -> Result<()> { let bin_dir = cli.bin_dir.unwrap_or_else(default_bin_dir); match cli.command { - Cmd::Install { package } => cmd_install(&package, &bin_dir), + Cmd::Install { packages } => { + for pkg in &packages { + cmd_install(pkg, &bin_dir)?; + } + Ok(()) + } Cmd::Remove { package } => cmd_remove(&package, &bin_dir), Cmd::Update { package } => cmd_update(package.as_deref(), &bin_dir), Cmd::List { installed } => cmd_list(installed), @@ -96,7 +102,8 @@ fn cmd_update(name: Option<&str>, bin_dir: &std::path::Path) -> Result<()> { let index = manifest::load(true)?; // force refresh on update let state = state::State::load()?; - let targets: Vec = match name { + let effective = name.filter(|&n| n != "all"); + let targets: Vec = match effective { Some(n) => vec![n.to_string()], None => state.packages.keys().cloned().collect(), };