From 0ba3d6e1f6e09c53d938ec03b30be60fee816924 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 13 Jun 2021 19:53:36 +0200 Subject: run(): Don't clone `base_cgitrc` into each thread Rejigger some types and signatures to allow us to get references to the `base_cgitrc` path instead of copying it for each repository. --- src/main.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index b3de5fc..92db74f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -129,7 +129,7 @@ fn run() -> Result<(), MultiError> { &repo, &db, &mirror_root, - base_cgitrc.clone(), // TODO: Can we avoid cloning + base_cgitrc.as_ref(), max_repo_size_bytes, ), ) @@ -153,14 +153,13 @@ fn run() -> Result<(), MultiError> { } /// Mirror or update `repo`. -fn process_repo( +fn process_repo>( repo: &github::Repo, db: &database::Db, mirror_root: &str, - base_cgitrc: Option, + base_cgitrc: Option

, max_repo_size_bytes: Option, ) -> anyhow::Result<()> { - anyhow::bail!("test"); if let Some(max_repo_size_bytes) = max_repo_size_bytes { if is_repo_oversize(repo.size, max_repo_size_bytes) { return Ok(()); @@ -186,9 +185,9 @@ fn process_repo( // database. Err(database::Error::Db(rusqlite::Error::QueryReturnedNoRows)) => { mirror( - &path, + path, &repo, - base_cgitrc.as_ref(), + base_cgitrc, )?; db.repo_insert(db_repo)?; @@ -234,11 +233,15 @@ fn clone_path>(base_path: P, repo: &github::Repo) -> PathBuf { } /// Mirror a repository. -fn mirror>( - clone_path: P, +fn mirror( + clone_path: P1, repo: &github::Repo, - base_cgitrc: Option

, -) -> anyhow::Result<()> { + base_cgitrc: Option, +) -> anyhow::Result<()> +where + P1: AsRef, + P2: AsRef, +{ git::mirror( &repo.git_url, &clone_path, -- cgit v1.2.3