use std::sync::Arc; use std::time::Duration; use export::AppState; use kenshell::KenShellClient; use sea_orm::DatabaseConnection; use crate::context::facade::GitContext; use crate::rpcgit::GitBaby; #[derive(Clone)] pub struct GitService { pub state: AppState, ks: Arc, } impl GitService { pub fn new(state: AppState) -> Self { let cfg = &state.config.git; let timeout = Duration::from_secs(cfg.kenshell_timeout_secs.max(1)); let ks = KenShellClient::connect_with_key( &cfg.kenshell_endpoint, &cfg.kenshell_rpc_key, timeout, ) .unwrap_or_else(|error| { panic!( "invalid git.kenshell_endpoint `{}`: {error}", cfg.kenshell_endpoint ) }); Self { state, ks: Arc::new(ks), } } pub fn ks(&self) -> &KenShellClient { &self.ks } pub fn baby(&self, ctx: &GitContext) -> GitBaby { GitBaby::new(Arc::new(ctx.clone())) } pub fn db_write(&self) -> &DatabaseConnection { self.state.database.write() } pub fn db_read(&self) -> &DatabaseConnection { self.state.database.read() } } pub mod analysis; pub mod archives; pub mod blame; pub mod blobs; pub mod branches; pub mod cache; pub mod clone; pub mod code_comments; pub mod commits; pub mod conflicts; pub mod content; pub mod context; pub mod diffs; pub mod hooks; pub mod lfs; pub mod licenses; pub mod logs; pub mod maintenance; pub mod merge; pub mod packs; pub mod patches; pub mod path_log; pub mod pdf; pub mod protection; pub mod refs; pub mod releases; pub mod remotes; pub mod repos; pub mod rpc; pub mod signatures; pub mod stars; pub mod submodules; pub mod tags; pub mod topics; pub mod trees; pub mod watches; pub mod whitelists;