refactor(git): generic refactor

Started thinking about a new problem relating to how to deal with a
series of operations, as quick has been doing so far.

Now that we are trying to react to errors, it would be cool if we could
stop early, but this require maintaining a list of things that have
failed to avoid running them, and so we need to perform that logic
inside of the function (at least it's the more reasonable approach imo)

One way I can sketch rn might be to copy the hashmap structure of repos
as a reference, and then delete the references from our cloned map as
they fail. This is not ideal in any specific way, but it's a good first
approximation.

Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
Christina Sørensen 2023-07-01 06:18:02 +02:00
parent e11efb3229
commit 6d83d278e1
Signed by: cafkafk
GPG key ID: CDDC792F655251ED
2 changed files with 51 additions and 32 deletions

View file

@ -236,6 +236,9 @@ impl Config {
/// Runs associated function on all repos in config
///
/// TODO: need to be made over a generic repo type
///
/// NOTE: currently unused
///
fn on_all<F>(&self, f: F)
where
F: Fn(&GitRepo),
@ -262,6 +265,29 @@ impl Config {
}
}
}
/// Runs associated function on all repos in config
///
/// TODO: need to be made over a generic repo type
///
/// NOTE: currently unused
///
/// # Current Problem
///
/// The goal of this function is that it should run some function on all
/// repos but stop executing further functions on any repo that fails,
/// without blocking the repos that don't have an issue.
///
/// This is actually somewhat hairy to do, at least at 6:16 am :S
fn series_on_all<F>(&self, f: F)
where
F: Fn(&GitRepo),
{
for (_, category) in self.categories.iter() {
for (_, repo) in category.repos.iter() {
f(repo);
}
}
}
/// Tries to pull all repositories, skips if fail.
pub fn pull_all(&self) {
debug!("exectuting pull_all");
@ -291,17 +317,10 @@ impl Config {
/// repositories, skips if fail.
pub fn quick(&self, msg: &String) {
debug!("exectuting quick");
self.on_all(|repo| {
let mut sp = Spinner::new(Spinners::Dots10, format!("{}: pull", repo.name).into());
repo.pull();
sp = Spinner::new(Spinners::Dots10, format!("{}: add_all", repo.name).into());
repo.add_all();
sp = Spinner::new(Spinners::Dots10, format!("{}: commit", repo.name).into());
repo.commit_with_msg(msg);
sp = Spinner::new(Spinners::Dots10, format!("{}: push", repo.name).into());
repo.push();
sp.stop_and_persist("", format!("{}: quick", repo.name).into());
});
self.on_all_spinner("pull", |repo| repo.pull());
self.on_all_spinner("add", |repo| repo.add_all());
self.on_all_spinner("commit", |repo| repo.commit_with_msg(msg));
self.on_all_spinner("push", |repo| repo.push());
}
/* LINK RELATED */

View file

@ -1,24 +1,14 @@
categories:
config:
flags: []
repos:
qmk_firmware:
name: qmk_firmware
path: /home/ces/org/src/git/
url: git@github.com:cafkafk/qmk_firmware.git
flags:
- Clone
- Push
starship:
name: starship
path: /home/ces/org/src/git/
url: https://github.com/starship/starship.git
flags:
- Clone
- Push
utils:
flags: []
repos:
gg:
name: gg
path: /home/ces/.dots/
url: git@github.com:cafkafk/gg.git
flags:
- Clone
- Push
li:
name: li
path: /home/ces/org/src/git/
@ -26,10 +16,20 @@ categories:
flags:
- Clone
- Push
gg:
name: gg
path: /home/ces/.dots/
url: git@github.com:cafkafk/gg.git
config:
flags: []
repos:
starship:
name: starship
path: /home/ces/org/src/git/
url: https://github.com/starship/starship.git
flags:
- Clone
- Push
qmk_firmware:
name: qmk_firmware
path: /home/ces/org/src/git/
url: git@github.com:cafkafk/qmk_firmware.git
flags:
- Clone
- Push