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 e3617956fe
commit 3217e27d4b
Signed by: cafkafk
GPG key ID: CDDC792F655251ED
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,15 +74,37 @@ 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,
let s = Box::leak( // name, and additional data for a subcommand
msg.as_mut() // TODO: generalize for reuse by all commands that operate on repo->name->msg
.get_or_insert(&mut QUICK_COMMIT.to_string()) Some(Commands::Quick { repo, name, msg }) => match (&repo, &name, &msg) {
.clone() (None, None, None) => {
.into_boxed_str(), let s = Box::leak(
); msg.as_mut()
config.quick(s); .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 }) => { Some(Commands::Fast { msg }) => {
let s = Box::leak( let s = Box::leak(
msg.as_mut() msg.as_mut()