diff --git a/crates/mapdiffbot2/src/git_operations.rs b/crates/mapdiffbot2/src/git_operations.rs index 7b4e9eb9..b46ad884 100644 --- a/crates/mapdiffbot2/src/git_operations.rs +++ b/crates/mapdiffbot2/src/git_operations.rs @@ -1,7 +1,7 @@ use eyre::{Context, Result}; use std::path::Path; -use git2::{build::CheckoutBuilder, FetchOptions, Repository, SubmoduleUpdateOptions}; +use git2::{build::CheckoutBuilder, FetchOptions, Repository}; pub fn fetch_and_get_branches<'a>( base_sha: &str, @@ -178,23 +178,6 @@ pub fn with_checkout( ) -> Result { repo.set_head(checkout_ref.name().unwrap())?; repo.checkout_head(Some(CheckoutBuilder::new().force().remove_untracked(true)))?; - - if let Ok(submodules) = repo.submodules() { - submodules.into_iter().for_each(|mut submodule| { - _ = submodule.update( - true, - Some( - SubmoduleUpdateOptions::default() - .allow_fetch(true) - .checkout({ - let mut builder = CheckoutBuilder::new(); - builder.force().remove_untracked(true); - builder - }), - ), - ); - }) - } commit_all_stragglers(repo)?; f() } @@ -206,23 +189,6 @@ pub fn checkout_to(checkout_ref: &str, repo: &Repository) -> Result<()> { .unwrap(), )?; repo.checkout_head(Some(CheckoutBuilder::new().force().remove_untracked(true)))?; - - if let Ok(submodules) = repo.submodules() { - submodules.into_iter().for_each(|mut submodule| { - _ = submodule.update( - true, - Some( - SubmoduleUpdateOptions::default() - .allow_fetch(true) - .checkout({ - let mut builder = CheckoutBuilder::new(); - builder.force().remove_untracked(true); - builder - }), - ), - ); - }) - } commit_all_stragglers(repo)?; Ok(()) } diff --git a/crates/mapdiffbot2/src/job_processor.rs b/crates/mapdiffbot2/src/job_processor.rs index 725fc7ac..9f5b1fb9 100644 --- a/crates/mapdiffbot2/src/job_processor.rs +++ b/crates/mapdiffbot2/src/job_processor.rs @@ -416,7 +416,19 @@ pub fn do_job(job: Job, blob_client: Azure) -> Result { let modified_files = filter_on_status(ChangeType::Modified); let removed_files = filter_on_status(ChangeType::Deleted); - let repository = git2::Repository::open(&repo_dir).wrap_err("Opening repository")?; + let mut repository = git2::Repository::open(&repo_dir).wrap_err("Opening repository")?; + + //has to be done this way because of borrowing rules + if let Ok(submod_names) = repository.submodules().map(|submodules| { + submodules + .into_iter() + .filter_map(|submod| submod.name().map(|refstr| refstr.to_owned())) + .collect::>() + }) { + submod_names.into_iter().for_each(|name| { + _ = repository.submodule_set_ignore(&name, git2::SubmoduleIgnore::All); + }); + }; if !clone_required { repository.remote_set_url("origin", &url)?;