git-next/crates/git/src/repository/real.rs

33 lines
1.1 KiB
Rust
Raw Normal View History

2024-06-09 10:21:09 +01:00
//
use std::sync::atomic::AtomicBool;
2024-06-09 10:21:09 +01:00
use crate as git;
use derive_more::Deref as _;
use git_next_config::GitDir;
pub struct RealRepository;
2024-06-09 10:21:09 +01:00
impl git::repository::RepositoryLike for RealRepository {
fn open(&self, gitdir: &GitDir) -> Result<git::OpenRepository, git::repository::Error> {
let gix_repo = gix::ThreadSafeRepository::open(gitdir.to_path_buf())?.to_thread_local();
2024-06-09 10:21:09 +01:00
Ok(git::repository::open::real(gix_repo))
}
#[tracing::instrument(skip_all)]
2024-06-09 10:21:09 +01:00
#[cfg(not(tarpaulin_include))] // requires external server
fn git_clone(
&self,
repo_details: &git::RepoDetails,
) -> Result<git::OpenRepository, git::repository::Error> {
tracing::info!("creating");
use secrecy::ExposeSecret;
let (gix_repo, _outcome) = gix::prepare_clone_bare(
repo_details.origin().expose_secret().as_str(),
repo_details.gitdir.deref(),
)?
.fetch_only(gix::progress::Discard, &AtomicBool::new(false))?;
tracing::info!("created");
2024-06-09 10:21:09 +01:00
Ok(git::repository::open::real(gix_repo))
}
}