feat(wip): repo and category selecting for subcmd

This starts to implement repo and category selecting for subcommands
that make use of these (push, pull, quick, fast... most of them!)

Still, this is proof of concept, now it needs to actually be made robust
and generalized, as well as implemented on all the commands.

Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
Christina Sørensen 2023-07-11 19:54:05 +02:00
parent 9d8128d3aa
commit 8b94120214
3 changed files with 38 additions and 11 deletions

View file

@ -1,7 +1,8 @@
#+title: Roadmap #+title: Roadmap
* 0.2.1 * 0.2.1
- [ ] jumps - [X] jumps
- [-] repo and category selecting for subcommands
* 0.2.0 (maybe) * 0.2.0 (maybe)
- [X] Links in categories? - [X] Links in categories?
- [X] Fix category with no links - [X] Fix category with no links

View file

@ -84,7 +84,11 @@ pub enum Commands {
/// Do quick pull-commit-push with msg for commit /// Do quick pull-commit-push with msg for commit
#[command(visible_alias = "q")] #[command(visible_alias = "q")]
Quick { msg: Option<String> }, Quick {
repo: Option<String>,
name: Option<String>,
msg: Option<String>,
},
/// Do fast pull-commit-push with msg for commit, skipping repo on failure /// Do fast pull-commit-push with msg for commit, skipping repo on failure
#[command(visible_alias = "f")] #[command(visible_alias = "f")]

View file

@ -74,7 +74,11 @@ fn main() {
Some(Commands::Link { msg: _ }) => { Some(Commands::Link { msg: _ }) => {
config.link_all(); config.link_all();
} }
Some(Commands::Quick { msg }) => { // 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( let s = Box::leak(
msg.as_mut() msg.as_mut()
.get_or_insert(&mut QUICK_COMMIT.to_string()) .get_or_insert(&mut QUICK_COMMIT.to_string())
@ -83,6 +87,24 @@ fn main() {
); );
config.quick(s); 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 }) => { Some(Commands::Fast { msg }) => {
let s = Box::leak( let s = Box::leak(
msg.as_mut() msg.as_mut()