use std::path::PathBuf;
use crate::config::repository_config::MerkleStoreKind;
use crate::core::v_latest::init_with_version_and_merkle_store;
use crate::core::versions::MinOxenVersion;
use crate::error::OxenError;
use crate::model::LocalRepository;
use crate::repositories;
use crate::test::repo_guard::{RepoDirGuard, TestLocalRepo};
use crate::test::test_utils::run_async;
use crate::test::{
add_txt_file_to_dir, create_prefixed_dir, create_repo_dir, generate_random_string,
init_test_env, test_run_dir,
};
#[inline(always)]
pub(crate) fn lmdb_test_base() -> PathBuf {
std::env::temp_dir().join("oxen-lmdb-tests")
}
#[allow(dead_code)]
pub(crate) fn create_lmdb_safe_empty_dir() -> Result<RepoDirGuard, OxenError> {
let dir = create_prefixed_dir(lmdb_test_base(), "dir")?;
Ok(RepoDirGuard::new(dir))
}
#[allow(dead_code)]
pub(crate) fn init_test_repo_with_merkle_store(
kind: MerkleStoreKind,
) -> Result<TestLocalRepo, OxenError> {
init_test_env();
log::info!("<<<<< init_test_repo_with_merkle_store start ({kind:?})");
let repo_dir = match kind {
MerkleStoreKind::Lmdb => create_prefixed_dir(lmdb_test_base(), "dir")?,
MerkleStoreKind::File => create_repo_dir(test_run_dir())?,
};
let guarded_repo = TestLocalRepo::new(|| {
init_with_version_and_merkle_store(&repo_dir, MinOxenVersion::LATEST, false, kind)
})?;
log::info!(">>>>> init_test_repo_with_merkle_store ready");
Ok(guarded_repo)
}
#[allow(dead_code)]
pub(crate) fn init_lmdb_safe_test_repo_with_merkle_store(
kind: MerkleStoreKind,
) -> Result<TestLocalRepo, OxenError> {
init_test_env();
log::info!("<<<<< init_lmdb_safe_test_repo_with_merkle_store start ({kind:?})");
let prefix = match kind {
MerkleStoreKind::Lmdb => "dir",
MerkleStoreKind::File => "repo",
};
let repo_dir = create_prefixed_dir(lmdb_test_base(), prefix)?;
let guarded_repo = TestLocalRepo::new(|| {
init_with_version_and_merkle_store(&repo_dir, MinOxenVersion::LATEST, false, kind)
})?;
log::info!(">>>>> init_lmdb_safe_test_repo_with_merkle_store ready");
Ok(guarded_repo)
}
#[allow(dead_code)]
pub(crate) async fn init_test_repo_merkle_init_version_store_async(
kind: MerkleStoreKind,
) -> Result<TestLocalRepo, OxenError> {
let repo = init_test_repo_with_merkle_store(kind)?;
repo.version_store().init().await?;
Ok(repo)
}
#[allow(dead_code)]
pub(crate) fn apply_one_commit_local_repo(repo: &LocalRepository) -> Result<(), OxenError> {
let txt = generate_random_string(20);
let file_path = add_txt_file_to_dir(&repo.path, &txt)?;
run_async(async { repositories::add(repo, &file_path).await })??;
repositories::commit(repo, "Init commit")?;
Ok(())
}