From 205542106781b50ff0b9fc3d3db58b28502d7a77 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 13 Apr 2024 15:15:39 +0100 Subject: [PATCH] refactor(repo/branch): extract get_commit_histories --- src/server/actors/repo/branch.rs | 41 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/server/actors/repo/branch.rs b/src/server/actors/repo/branch.rs index e1bcf6a7..2b450319 100644 --- a/src/server/actors/repo/branch.rs +++ b/src/server/actors/repo/branch.rs @@ -1,9 +1,15 @@ use actix::prelude::*; -use kxio::network; +use kxio::network::{self, Network}; use tracing::{error, info, warn}; -use crate::server::{actors::repo::ValidateRepo, config, forge, git::Git, types::ResetForce}; +use crate::server::{ + actors::repo::ValidateRepo, + config::{self, RepoConfig, RepoDetails}, + forge::{self, CommitHistories}, + git::Git, + types::ResetForce, +}; use super::{RepoActor, StartMonitoring}; @@ -15,16 +21,8 @@ pub async fn validate_positions( git: Git, net: network::Network, ) { - let commit_histories = match repo_details.forge.forge_type { - #[cfg(feature = "forgejo")] - config::ForgeType::ForgeJo => { - forge::forgejo::get_commit_histories(&repo_details, &config, &net).await - } - #[cfg(test)] - config::ForgeType::MockForge => { - forge::mock::get_commit_histories(&repo_details, &config, &net).await - } - }; + // Collect Commit Histories for `main`, `next` and `dev` branches + let commit_histories = get_commit_histories(&repo_details, &config, &net).await; let commit_histories = match commit_histories { Ok(commit_histories) => commit_histories, Err(err) => { @@ -33,6 +31,8 @@ pub async fn validate_positions( return; } }; + + // Validations let Some(main) = commit_histories.main.first().cloned() else { warn!("No commits on main branch '{}'", config.branches().main()); revalidate_positions(addr).await; @@ -115,6 +115,23 @@ pub async fn validate_positions( }); } +async fn get_commit_histories( + repo_details: &RepoDetails, + config: &RepoConfig, + net: &Network, +) -> Result { + match repo_details.forge.forge_type { + #[cfg(feature = "forgejo")] + config::ForgeType::ForgeJo => { + forge::forgejo::get_commit_histories(repo_details, config, net).await + } + #[cfg(test)] + config::ForgeType::MockForge => { + forge::mock::get_commit_histories(repo_details, config, net).await + } + } +} + async fn revalidate_positions(addr: Addr) { // TODO : (#18) sleep and restart while we don't have webhooks tokio::time::sleep(std::time::Duration::from_secs(10)).await;