diff --git a/crates/gitnow/Cargo.toml b/crates/gitnow/Cargo.toml index fa6880e..b897043 100644 --- a/crates/gitnow/Cargo.toml +++ b/crates/gitnow/Cargo.toml @@ -17,5 +17,5 @@ uuid = { version = "1.7.0", features = ["v4"] } async-trait = "0.1.82" toml = "0.8.19" -gitea-rs = { git = "https://git.front.kjuulh.io/kjuulh/gitea-rs", ref = "main", version = "1.22.1" } +gitea-rs = { git = "https://git.front.kjuulh.io/kjuulh/gitea-rs", version = "1.22.1" } url = "2.5.2" diff --git a/crates/gitnow/src/app.rs b/crates/gitnow/src/app.rs new file mode 100644 index 0000000..597ab60 --- /dev/null +++ b/crates/gitnow/src/app.rs @@ -0,0 +1,12 @@ +use crate::config::Config; + +#[derive(Debug)] +pub struct App { + pub config: Config, +} + +impl App { + pub async fn new_static(config: Config) -> anyhow::Result<&'static App> { + Ok(Box::leak(Box::new(App { config }))) + } +} diff --git a/crates/gitnow/src/commands.rs b/crates/gitnow/src/commands.rs new file mode 100644 index 0000000..dec16f3 --- /dev/null +++ b/crates/gitnow/src/commands.rs @@ -0,0 +1 @@ +pub mod root; diff --git a/crates/gitnow/src/commands/root.rs b/crates/gitnow/src/commands/root.rs new file mode 100644 index 0000000..784af27 --- /dev/null +++ b/crates/gitnow/src/commands/root.rs @@ -0,0 +1,62 @@ +use crate::{ + app::App, + git_provider::{ + gitea::GiteaProviderApp, github::GitHubProviderApp, GitProvider, VecRepositoryExt, + }, +}; + +#[derive(Debug, Clone)] +pub struct RootCommand { + app: &'static App, +} + +impl RootCommand { + pub fn new(app: &'static App) -> Self { + Self { app } + } + + #[tracing::instrument(skip(self))] + pub async fn execute(&mut self) -> anyhow::Result<()> { + tracing::debug!("executing"); + + //let github_provider = self.app.github_provider(); + let gitea_provider = self.app.gitea_provider(); + + let mut repositories = Vec::new(); + for gitea in self.app.config.providers.gitea.iter() { + if let Some(user) = &gitea.current_user { + let mut repos = gitea_provider + .list_repositories_for_current_user( + user, + &gitea.url, + gitea.access_token.as_ref(), + ) + .await?; + + repositories.append(&mut repos); + } + + for gitea_user in gitea.users.iter() { + let mut repos = gitea_provider + .list_repositories_for_user( + gitea_user.into(), + &gitea.url, + gitea.access_token.as_ref(), + ) + .await?; + + repositories.append(&mut repos); + } + } + + repositories.collect_unique(); + + for repo in &repositories { + tracing::info!("repo: {}", repo.to_rel_path().display()); + } + + tracing::info!("amount of repos fetched {}", repositories.len()); + + Ok(()) + } +} diff --git a/crates/gitnow/src/main.rs b/crates/gitnow/src/main.rs index 26a8aab..e27747a 100644 --- a/crates/gitnow/src/main.rs +++ b/crates/gitnow/src/main.rs @@ -5,6 +5,8 @@ use clap::{Parser, Subcommand}; use commands::root::RootCommand; use config::Config; +mod app; +mod commands; mod config; mod git_provider; @@ -50,85 +52,3 @@ async fn main() -> anyhow::Result<()> { Ok(()) } - -mod app { - use crate::config::Config; - - #[derive(Debug)] - pub struct App { - pub config: Config, - } - - impl App { - pub async fn new_static(config: Config) -> anyhow::Result<&'static App> { - Ok(Box::leak(Box::new(App { config }))) - } - } -} - -mod commands { - pub mod root { - use crate::{ - app::App, - git_provider::{ - gitea::GiteaProviderApp, github::GitHubProviderApp, GitProvider, VecRepositoryExt, - }, - }; - - #[derive(Debug, Clone)] - pub struct RootCommand { - app: &'static App, - } - - impl RootCommand { - pub fn new(app: &'static App) -> Self { - Self { app } - } - - #[tracing::instrument(skip(self))] - pub async fn execute(&mut self) -> anyhow::Result<()> { - tracing::debug!("executing"); - - //let github_provider = self.app.github_provider(); - let gitea_provider = self.app.gitea_provider(); - - let mut repositories = Vec::new(); - for gitea in self.app.config.providers.gitea.iter() { - if let Some(user) = &gitea.current_user { - let mut repos = gitea_provider - .list_repositories_for_current_user( - user, - &gitea.url, - gitea.access_token.as_ref(), - ) - .await?; - - repositories.append(&mut repos); - } - - for gitea_user in gitea.users.iter() { - let mut repos = gitea_provider - .list_repositories_for_user( - gitea_user.into(), - &gitea.url, - gitea.access_token.as_ref(), - ) - .await?; - - repositories.append(&mut repos); - } - } - - repositories.collect_unique(); - - for repo in &repositories { - tracing::info!("repo: {}", repo.to_rel_path().display()); - } - - tracing::info!("amount of repos fetched {}", repositories.len()); - - Ok(()) - } - } - } -}