diff --git a/doc/roadmap.org b/doc/roadmap.org index bae4000..53cbdf9 100644 --- a/doc/roadmap.org +++ b/doc/roadmap.org @@ -1,7 +1,8 @@ #+title: Roadmap * 0.2.1 -- [ ] jumps +- [X] jumps +- [-] repo and category selecting for subcommands * 0.2.0 (maybe) - [X] Links in categories? - [X] Fix category with no links diff --git a/src/cli.rs b/src/cli.rs index a9d1387..38c4c3a 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -84,7 +84,11 @@ pub enum Commands { /// Do quick pull-commit-push with msg for commit #[command(visible_alias = "q")] - Quick { msg: Option }, + Quick { + repo: Option, + name: Option, + msg: Option, + }, /// Do fast pull-commit-push with msg for commit, skipping repo on failure #[command(visible_alias = "f")] diff --git a/src/main.rs b/src/main.rs index cb9d792..1905182 100644 --- a/src/main.rs +++ b/src/main.rs @@ -74,15 +74,37 @@ fn main() { Some(Commands::Link { msg: _ }) => { config.link_all(); } - Some(Commands::Quick { msg }) => { - let s = Box::leak( - msg.as_mut() - .get_or_insert(&mut QUICK_COMMIT.to_string()) - .clone() - .into_boxed_str(), - ); - config.quick(s); - } + // NOTE: This implements "sub-subcommand"-like matching on repository, + // name, and additional data for a subcommand + // TODO: generalize for reuse by all commands that operate on repo->name->msg + Some(Commands::Quick { repo, name, msg }) => match (&repo, &name, &msg) { + (None, None, None) => { + let s = Box::leak( + msg.as_mut() + .get_or_insert(&mut QUICK_COMMIT.to_string()) + .clone() + .into_boxed_str(), + ); + config.quick(s); + } + (repo, None, None) => { + println!("{}", repo.as_ref().unwrap()); + todo!(); + } + (repo, name, None) => { + println!("{} {}", repo.as_ref().unwrap(), name.as_ref().unwrap()); + todo!(); + } + (repo, name, msg) => { + println!( + "{} {} {}", + repo.as_ref().unwrap(), + name.as_ref().unwrap(), + msg.as_ref().unwrap(), + ); + todo!(); + } + }, Some(Commands::Fast { msg }) => { let s = Box::leak( msg.as_mut()