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
* 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

View file

@ -84,7 +84,11 @@ pub enum Commands {
/// Do quick pull-commit-push with msg for commit
#[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
#[command(visible_alias = "f")]

View file

@ -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()